在 docker 中处理服务配置的最佳实践

Mar*_*ell 5 docker docker-compose

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

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

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

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

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

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

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

Pie*_* B. 3

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

Docker 镜像应该可以在不同的上下文中重用,而仅针对特定配置(即环境)构建整个镜像将无法实现这一目的:

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

    Dockerfile 最佳实践

    强烈建议您对图像的任何可变和/或用户可维护的部分使用 VOLUME 。

    绑定安装的良好用例

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

  • 我建议永远不要在 Dockerfile 中使用“VOLUME”,除非您完全清楚它的作用;绑定安装配置文件不需要它即可工作。 (2认同)