Dockerfile,如何创建图片ubuntu 14.04

时间:2015-12-01 06:59:30

标签: image docker containers

昨天我被问到如何使用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"]

请帮帮我

3 个答案:

答案 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的图像。

  • COPYRUN您在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开始,因为你明显错过了这个问题,它包含了你问题的所有答案,甚至还有你甚至不想问的问题。