昨天我被问到如何使用dockerfile制作一个泊坞窗图像
这次我想添加一个问题
如果我想在安装它的图像docker上制作操作系统ubuntu 14:04,postgresql-9.3.10,安装Java JDK 6,复制文件(重要位置),并在图像上创建用户。
我是否可以根据图像需要组合几个dockerfile? (postgresql的dockerfile,java,copyfile,并创建一个用户如此一个dockerfile)
实施例。我做了一个dockerfile“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"]
请帮帮我
答案 0 :(得分:2)
我认为由于图层系统,无法嵌套多个Dockerfiles。但是,您可以将任务外包到shell脚本中并在Dockerfile中运行它们。
在您的Dockerfile中,请修复基本映像:
flag = 0
此外,FROM ubuntu:14.04
无效。您可能希望使用可以使用的CMD
执行bash。
答案 1 :(得分:2)
不,你不能组合多个Dockerfile。
最佳做法是:
从已包含所需内容的imabe开始,例如基于ubuntu的postgresql image 。 这意味着如果您的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
定义的nav ul li:hover {
background: #4b545f;
background: linear-gradient(top, #4f5964 0%, #5f6975 40%);
background: -moz-linear-gradient(top, #4f5964 0%, #5f6975 40%);
background: -webkit-linear-gradient(top, #4f5964 0%,#5f6975 40%);
}
在你的基本形象。
答案 2 :(得分:1)
我建议你从doc on Dockerfile开始,因为你明显错过了这个问题,它包含了你问题的所有答案,甚至还有你甚至不想问的问题。