【问题标题】:Dockerfile, how to create images ubuntu 14.04Dockerfile,如何创建镜像 ubuntu 14.04
【发布时间】:2015-12-01 06:59:30
【问题描述】:

昨天有人问我如何使用 dockerfile 制作 docker 镜像

这次我想补充一个问题

如果我想在已安装的镜像 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"]

请帮帮我

【问题讨论】:

    标签: image docker containers


    【解决方案1】:

    不行,你不能合并多个 Dockerfile。

    最佳做法是:

    • 从一个 imabe 开始,已经包含了你需要的东西,就像这个 postgresql image 已经基于 ubuntu。
      这意味着如果您的 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

    【讨论】:

    • kalau untuk OS Ubuntu nya perlu menambahkan 语法 CMD di line terakhir yang menunjukkan [/bin/bash] ? ` CMD [/bin/bash] `
    • @YudiDwiyanto 你不需要CMD [/bin/bash]:默认情况下,postgres 图像将运行 postgres。如果您想通过打开 bash 来运行该图像,然后您执行 docker run -it --rm myPostgres bash:最后一个参数将覆盖定义的 CMD 命令默认情况下您的图像。
    • @YudiDwiyanto apakah Anda menerima,maka 不接受 jababan ini 吗?阿帕杨喜朗?
    • Ketika ingin menginstall java jdk 6,masih terjadi 错误
    • Ternyata, waktu "apt-get install -y openjdk-6-jdk && \" saya kurang menambahkan -y ketika mau install, ok fix accept.. 谢谢,先生
    【解决方案2】:

    我认为嵌套多个 Dockerfile 是不可能的,因为分层系统。但是,您可以将任务外包到 shell 脚本中并在 Dockerfile 中运行。

    请在您的 Dockerfile 中修复基础镜像:

    FROM ubuntu:14.04

    此外,您的CMD 无效。您可能希望使用可以使用的 CMD ["bash"] 执行 bash。

    【讨论】:

      【解决方案3】:

      我建议您从 doc on Dockerfile 开始,因为您显然错过了它,它包含您问题的所有答案,甚至包括您甚至还没有想到要问的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-30
        • 1970-01-01
        • 2020-05-19
        • 1970-01-01
        • 1970-01-01
        • 2018-06-16
        • 1970-01-01
        相关资源
        最近更新 更多