【问题标题】:Dockerfile and dev/test/prod environmentDockerfile 和 dev/test/prod 环境
【发布时间】:2015-01-27 11:10:28
【问题描述】:

我想创建 Dockerfile,它能够构建三个不同的映像(目前一个)。这些图像仅在配置文件中有所不同。

我在尝试:

  • 创建三个不同的 docker 文件(不起作用,因为 dockerfile 需要命名为 Dockerfile 并位于上下文根目录中
  • 找到将参数传递给 docker build 命令的方法 - 未找到
  • 使用 ONBUILD 命令 - 我创建了一个主文件和三个特定的文件,它们将特定的 conf 文件复制到图像中的同一目录中(由于与第一点相同的原因,它不起作用)
  • 从标准输入传递 docker 文件 - 它不起作用,因为没有上下文(所以我不能使用 ADD/COPY 命令)

我必须说我的想法已经用完了:/ 你是如何处理这种情况的。在我看来,这应该是一个普遍的问题。

【问题讨论】:

  • 考虑将运行时配置作为环境设置传入的单个图像。这样,您就可以在 Dev 中创建映像,在测试中验证相同的映像,并确信它在生产中以相同的方式运行。在我看来,为每个部署创建一个新的二进制工件是一种反模式。
  • 我发布了一个更笼统的问题:stackoverflow.com/questions/35733166/…

标签: docker boot2docker dockerfile


【解决方案1】:

为什么不在你的Dockerfile中复制所有3个配置文件,然后docker run -e config=file1(或file2或file3)并使用config环境变量的值来获取所需的配置文件。检查文档 http://docs.docker.com/reference/commandline/cli/#run

您也可以使用docker run 命令的--env-file=[] Read in a line delimited file of environment variables

您可以通过docker run -it -e mytag=abc123 ubuntu:latest env | grep mytag 显示mytag=abc123 来检查环境变量是否可用

【讨论】:

    【解决方案2】:

    如果您想要 3 个不同的图像,请使用 3 个不同的 Dockerfile。命名问题很烦人,但您可以编写一个帮助脚本来简单地复制文件并调用docker build,例如

    cp Dockerfile-cfg1 Dockerfile
    docker build -t "cfg1" .
    cp Dockerfile-cfg2 Dockerfile
    docker build -t "cfg2" .
    

    但是,正如@user2915097 所建议的那样,更好的解决方案可能是拥有一个图像并在运行时选择配置。这意味着照顾和维护多个图像的开销更少。

    【讨论】:

      【解决方案3】:

      我添加了三个不同的文件:

      test.Dockerfile
      dev.Dockerfile
      prod.Dockerfile
      

      我已经使用文件名运行它们:

      docker build -t name/name -f test.Dockerfile .
      docker build -t name/name -f dev.Dockerfile .
      docker build -t name/name -f prod.Dockerfile .
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-04
        • 2019-07-31
        • 2021-06-18
        • 2021-09-22
        • 1970-01-01
        • 2020-11-30
        • 1970-01-01
        相关资源
        最近更新 更多