Dockerfile,如何创建镜像 ubuntu 14.04
Dockerfile, how to create images ubuntu 14.04
昨天有人问我如何使用 docker 文件
制作 docker 图像
这次我想补充一个问题
如果我想在已安装的图像 docker 上制作 OS ubuntu 14:04,postgresql-9.3.10,请安装 Java JDK6、复制文件(重要位置),并在images上创建用户。
我是否可以根据需要合并多个 docker 文件作为图像? (dockerpostgresql 文件,java,复制文件,并创建一个用户这样一个 docker 文件)
例子。我制作了一个 docker 文件 "ubuntu"
其中包含命令
顶行
# Create dockerfile
# get OS ubuntu to images
FROM ubuntu: 14:04
# !!further adding a command on the following link, below the line per-dockerfile(intends command in dockerfile on the link)
# command on dockerfile postgresql-9.3
https://github.com/docker-library/postgres/blob/ed23320582f4ec5b0e5e35c99d98966dacbc6ed8/9.3/Dockerfile
# command on dockerfile java
https://github.com/docker-library/java/blob/master/openjdk-6-jdk/Dockerfile
# create a user on images ubuntu
RUN adduser myuser
# copy file/directory on images ubuntu
COPY /home/myuser/test /home/userimagedockerubuntu/test
# ?
CMD ["ubuntu:14.04"]
请帮帮我
我认为由于层系统,嵌套多个 Dockerfile 是不可能的。但是,您可以将任务外包给 shell 脚本和 运行 Dockerfile 中的脚本。
请在您的 Dockerfile 中修复基础映像:
FROM ubuntu:14.04
此外,您的 CMD
无效。您可能想执行一个 bash 和 CMD ["bash"]
,您可以使用它。
不可以,不能合并多个 Dockerfile。
最佳做法是:
从一个imabe开始已经包含了你需要的东西,像这样postgresql image已经基于ubuntu.
这意味着如果您的 Dockerfile 以:
开头
FROM orchardup/postgresql
您将构建一个 已经 包含 ubuntu 和 postgresql 的映像。
COPY
或 RUN
你在 dockerfile 中需要什么,like for openjdk6:
RUN \
apt-get update && \
apt-get install -y openjdk-6-jdk && \
rm -rf /var/lib/apt/lists/*
ENV JAVA_HOME /usr/lib/jvm/java-6-openjdk-amd64
最后,您的默认命令应该运行您想要的服务:
# Set the default command to run when starting the container
CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"]
但是由于 Dockerfile of orchardup/postgresql
已经 包含一个 CMD
,您甚至不必指定一个:您将从 CMD
在您的基本图像中定义。
我建议你从 doc on Dockerfile 开始,因为你显然错过了这个,它包含了你问题的所有答案,甚至还有你甚至不想问的问题。
昨天有人问我如何使用 docker 文件
制作 docker 图像这次我想补充一个问题
如果我想在已安装的图像 docker 上制作 OS ubuntu 14:04,postgresql-9.3.10,请安装 Java JDK6、复制文件(重要位置),并在images上创建用户。
我是否可以根据需要合并多个 docker 文件作为图像? (dockerpostgresql 文件,java,复制文件,并创建一个用户这样一个 docker 文件)
例子。我制作了一个 docker 文件 "ubuntu" 其中包含命令
顶行
# Create dockerfile
# get OS ubuntu to images
FROM ubuntu: 14:04
# !!further adding a command on the following link, below the line per-dockerfile(intends command in dockerfile on the link)
# command on dockerfile postgresql-9.3
https://github.com/docker-library/postgres/blob/ed23320582f4ec5b0e5e35c99d98966dacbc6ed8/9.3/Dockerfile
# command on dockerfile java
https://github.com/docker-library/java/blob/master/openjdk-6-jdk/Dockerfile
# create a user on images ubuntu
RUN adduser myuser
# copy file/directory on images ubuntu
COPY /home/myuser/test /home/userimagedockerubuntu/test
# ?
CMD ["ubuntu:14.04"]
请帮帮我
我认为由于层系统,嵌套多个 Dockerfile 是不可能的。但是,您可以将任务外包给 shell 脚本和 运行 Dockerfile 中的脚本。
请在您的 Dockerfile 中修复基础映像:
FROM ubuntu:14.04
此外,您的 CMD
无效。您可能想执行一个 bash 和 CMD ["bash"]
,您可以使用它。
不可以,不能合并多个 Dockerfile。
最佳做法是:
从一个imabe开始已经包含了你需要的东西,像这样postgresql image已经基于ubuntu.
开头
这意味着如果您的 Dockerfile 以:FROM orchardup/postgresql
您将构建一个 已经 包含 ubuntu 和 postgresql 的映像。
COPY
或RUN
你在 dockerfile 中需要什么,like for openjdk6:RUN \ apt-get update && \ apt-get install -y openjdk-6-jdk && \ rm -rf /var/lib/apt/lists/* ENV JAVA_HOME /usr/lib/jvm/java-6-openjdk-amd64
最后,您的默认命令应该运行您想要的服务:
# Set the default command to run when starting the container
CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"]
但是由于 Dockerfile of orchardup/postgresql
已经 包含一个 CMD
,您甚至不必指定一个:您将从 CMD
在您的基本图像中定义。
我建议你从 doc on Dockerfile 开始,因为你显然错过了这个,它包含了你问题的所有答案,甚至还有你甚至不想问的问题。