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

docker中处理服务配置的最佳实践,docker,docker-compose,Docker,Docker Compose,我想使用应用程序创建者提供的docker compose文件在生产环境(单个主机)中部署docker应用程序。基于docker的解决方案被用作单片二进制安装程序的替代品 应用程序附带默认配置,但管理员希望应用适度的配置更改 似乎有几种方法可以将自定义配置应用于docker compose.yml文件中定义的服务,但我不确定哪种方法是最佳做法。我目前正在考虑的两个问题是: 将配置烘焙到新图像中。在这里,我将为docker compose文件中定义的每个服务添加一个构建步骤,并创建一个最小的Doc

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

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

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

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

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

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


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

根据您的上下文,我认为使用绑定装载会更好

Docker映像应该在不同的上下文中可重用,仅为特定配置(即环境)构建整个映像将无法达到此目的:

  • 您可以创建特定于环境的映像,而不是基本映像提供的常规配置
  • 每次需要更改配置时,都需要重建整个映像,而使用绑定装载,只需通过应用程序简单地重新启动或读取配置文件即可
  • Docker文档建议:

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

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


我建议不要在Dockerfile中使用
,除非你完全清楚它的作用;绑定装载配置文件不需要它。