Docker容器中的配置管理

Uda*_*rma 5 configuration-management continuous-deployment docker devops

目前,我有配置文件存储在GitHub中。我有如下格式单一的JSON文件 { DEV: { key1 : val1, key2 : val2 }PROD: { key1 : val1, key2 : val2 } }

我的构建系统克隆了git repo,构建了项目并创建了Docker映像,并将其存储在私有Docker注册表中。我将jar文件和配置文件复制到Docker映像中。每当我启动一个容器时,我都会注入一个环境变量(ENV = DEV / PROD),我的代码将使用该变量读取基于环境的配置。

我在这里有几个问题:

  • 维护特定于环境的配置的最佳方法是什么?

  • 配置文件可能包含敏感数据,例如api密钥和机密信息,在构建Docker映像时如何加密,存储和解密?

  • 如果要更改某些配置,则需要触发构建,因为我的配置文件位于Docker映像内。我可以将配置文件作为卷放置在Docker容器外部,以便我可以替换配置文件并重新启动容器,以便代码读取更新的配置吗?如果要放置在Docker容器之外,是否仍可以使用任何集群管理工具进行容器编排/管理(Kubernetes / ECS)?
  • 通过仅重新启动容器而不是构建新的Docker映像并部署新的容器,使运行在Docker容器中的应用读取更新的配置的方法是什么?

Bla*_*ork 1

  1. ENV 变量很好。如果你有非常复杂的系统,你可以旋转 Consul 和/或 Vault 来管理安全配置,但如果你的系统很小,那么混乱就不值得付出努力。
  2. 您可以将所有配置加密为哈希值,并使用只有应用程序知道的密钥对其进行解密。
  3. 使用 docker-compose。它允许完美的机制 - 您在这里实际请求的机制,例如docker-compose.yml

    version: "2"  
    services:   
      server:
        hostname: server
        container_name: server
        image: serverBla
        build: ./server
        env_file:
          - ./config/config.env
    
    Run Code Online (Sandbox Code Playgroud)

该文件./config/config.env是您的“动态”配置。您只需重新创建容器即可刷新应用程序内的值。据我所知 docker-compose 可以很好地处理你提到的任何内容。