【问题标题】:Docker multiple environmentsDocker 多环境
【发布时间】:2017-02-17 00:45:48
【问题描述】:

我正试图围绕 Docker 展开思考,但我很难弄清楚。我尝试在我的小项目(MERN 堆栈)中实现它,我在想你如何区分开发(可能是暂存)和生产环境。

我看到一个example,他们使用了 2 个 Docker 文件和 2 个 docker-compose 文件(每一对用于一个 env,所以 Dockerfile + docker-compose.yml 用于产品,Dockerfile-dev + docker-compose-dev .yml 用于开发)。

但这对我来说似乎有点矫枉过正。我宁愿只将它放在两个文件中。

还有一个问题是,例如对于开发,我想在全球范围内安装 nodemon,但不是为了生产。

我想在完美的解决方案中运行类似的东西

docker-compose -e ENV=dev build
docker-compose -e ENV=dev up

请记住,我还没有完全理解 docker,所以如果你发现了我对 docker 的一些误解,你可以指出来。

【问题讨论】:

    标签: docker docker-compose dockerfile development-environment


    【解决方案1】:

    你可以从“Using Compose in production”中得到一些线索

    您几乎肯定会希望对应用配置进行更适合实际环境的更改。这些变化可能包括:

    • 删除应用程序代码的所有卷绑定,以便代码保留在容器内并且不能从外部更改
    • 绑定到主机上的不同端口
    • 以不同方式设置环境变量(例如,减少日志记录的详细程度,或启用电子邮件发送)
    • 指定重启策略(例如,restart: always)以避免停​​机
    • 添加额外服务(例如,日志聚合器)

    建议与您提到的示例不太相似:

    因此,您可能需要定义一个额外的 Compose 文件,例如 production.yml,它指定适合生产的配置。此配置文件只需要包含您希望对原始 Compose 文件进行的更改。

    docker-compose -f docker-compose.yml -f production.yml up -d
    

    这个 overriding mechanism 比尝试将 dev 和 prod 逻辑混合在一个 compose 文件中,并尝试选择一个环境变量要好。

    注意:如果您将第二个 dockerfile 命名为 docker-compose.override.yml,则简单的 docker-compose up 将自动读取覆盖。
    但是在您的情况下,基于环境的名称更清晰。

    【讨论】:

      【解决方案2】:

      Docker Compose 默认读取docker-compose.ymldocker-compose.override.ymlUnderstanding-Multiple-Compose-Files

      您可以设置默认的docker-compose.yml 和不同的覆盖撰写文件。例如,docker-compose.prod.ymldocker-compose.test.yml。将它们放在同一个地方。

      然后为每个环境创建一个名为 docker-compose.override.yml 的符号链接。
      跟踪docker-compose.{env}.yml 文件并将docker-compose.override.yml 添加到.gitignore
      在产品环境中:ln -s ./docker-compose.prod.yml ./docker-compose.override.yml
      在测试环境中:ln -s ./docker-compose.test.yml ./docker-compose.override.yml
      项目结构将如下所示:

      project\
        - docker-compose.yml       # tracked
        - docker-compose.prod.yml  # tracked
        - docker-compose.test.yml  # tracked
        - docker-compose.override.yml # ignored & linked to override composefile for current env 
        - src/
        - ...
      

      那么你就完成了。在每个环境中,您都可以使用具有相同命令的 compose-file docker-compose up

      如果您不确定,请使用docker-compose config 检查它是否被正确覆盖。

      【讨论】:

        猜你喜欢
        • 2019-01-07
        • 2019-10-14
        • 2021-04-27
        • 2017-12-26
        • 2018-09-20
        • 2019-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多