在Docker中处理服务配置的最佳做法

时间:2019-03-24 19:44:00

标签: docker docker-compose

我想使用应用程序创建者提供的docker-compose文件在生产环境(单个主机)中部署docker应用程序。基于docker的解决方案被用作单片二进制安装程序的直接替代。

该应用程序附带默认配置,但期望管理员希望应用适当的配置更改。

似乎有几种方法可以将自定义配置应用于docker-compose.yml文件中定义的服务,但是我不确定哪种方法被认为是最佳实践。我目前正在考虑的两个是:

  • 将配置复制到新映像中。在这里,我将为docker-compose文件中定义的每个服务添加一个构建步骤,并创建一个最小的Dockerfile,它使用COPY用我的自定义配置文件替换映像中的现有配置文件。在sed语句中使用echoCMD也可以用来内联更改配置,而无需替换批发文件。

  • 使用绑定配置并将其配置存储在主机上。在这种情况下,我会将所有自定义配置文件存储在主机上的目录中,并在docker-compose文件中的每个服务的volumes参数中定义绑定安装。

第一种选择对我来说似乎是最干净的,因为该应用程序是完全独立的,但是如果我想进行任何进一步的配置更改,则需要重新构建映像。第二个选项似乎最简单,因为我可以即时更改配置(根据容器中的要求重新启动服务)。

是否存在将自定义配置注入Docker服务的推荐方法?

1 个答案:

答案 0 :(得分:0)

鉴于您的情况,我认为使用绑定安装会更好。

一个Docker映像应该可以在不同的上下文中重用,并且仅针对特定配置(即环境)构建整个映像会破坏该目的:

  • 创建基础环境映像,而不是基础映像提供的常规配置
  • 每次需要更改配置时,都需要重建整个映像,而对于绑定安装,只需重新启动或由应用程序重新读取配置文件就足够了
  • Docker文档建议:

    Dockerfile best practice

      

    强烈建议您将VOLUME用于任何可变和/或   图片的用户可维修部分。

    Good use cases for bind mounts

      

    配置文件从主机共享到容器。