gpt4 book ai didi

docker - Docker 容器中的配置管理

转载 作者:行者123 更新时间:2023-12-04 15:31:05 31 4
gpt4 key购买 nike

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

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

我在这里有几个问题:

  • 维护环境特定配置的最佳方法是什么?
  • 配置文件可能包含api key 和secrets等敏感数据,我在构建Docker镜像时如何加密存储和解密?
  • 如果我想更改一些配置,我需要触发构建,因为我的配置文件放在 Docker 镜像中。我可以将配置文件作为卷放置在 Docker 容器之外,以便我可以替换配置文件并重新启动容器,以便代码读取更新的配置吗?如果我想放置在 Docker 容器之外,我仍然可以使用任何集群管理工具进行容器编排/管理(Kubernetes/ECS)吗?
  • 通过重新启动容器而不是构建新的 docker 镜像并部署新容器,让在 Docker 容器中运行的应用程序读取更新的配置的方法是什么?
  • 最佳答案

    我对您的大部分问题的回答是 "Vault by Hashicorp"

    您可以在您的环境中启动一个 Vault 集群,让您的容器连接到 Vault,并在启动和运行时从 Vault 检索 secret 。实现 secret 检索的最简单的方法是在启动时将 secret 读入容器并插入容器的 ENV。

    如果您更进一步,您可以使用语言级别的 Vault 客户端库在应用程序运行时检索和刷新 secret ,从而无需重新启动容器以检索新 secret 。

    这如何符合您的要求?

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

  • 我会说保险柜。如果需要,您可以使用带有 Hiera 的 Puppet 将 secret 写入文件或文件夹,但这意味着将 secret 写入磁盘并不理想。 TMK K8s 在静止时存储未加密的 secret ,这也不理想。我更喜欢这里的保险柜。每个环境都有自己的 Vault 集群,并且有您的“环境特定配置”。
  • 配置文件可能包含敏感数据,例如 api key 和
    构建 Docker 时如何加密、存储和解密的 secret
    图片?

  • 往上看。 Vault 存储静态加密的 secret 。使用您的 Vault token (如果需要,您可以通过卷安装到您的容器中)访问 secret 并解密它们。然后,您可以在启动容器主进程之前将它们推送到您的 ENV,或者进行更紧密的集成并使 Vault 成为应用程序逻辑的一部分。
  • 如果我想更改一些配置,我需要触发构建
    因为我的配置文件放在 Docker 镜像中。我可以吗
    将 Docker 容器外部的配置文件作为一个卷放置,以便我可以
    替换配置文件并重新启动容器,以便代码读取更新
    配置?如果我想放置在 Docker 容器之外,我还能
    对容器使用任何集群管理工具
    编排/管理(Kubernetes/ECS)?

  • 这个问题的答案在很大程度上取决于配置包含的内容。如果它特定于代码修订,我强烈建议将它与您的代码捆绑在一起,以防止代码和配置中的任何不匹配。

    如果它有效地独立于代码(例如:调整值或 secret ),我会将它们扔到 Vault 中 - 当您可以将它们存储在加密的 secret 管理系统中时,为什么要将它们放在文件中?

    但是,如果您对文件感兴趣,您可以轻松地将它们从已知卷挂载到已知路径,并且所有调度系统(包括现在的 Nomad)都允许使用已部署的容器挂载卷。
  • 让运行在 Docker 容器中的应用程序读取的方法是什么
    通过重新启动容器而不是构建来更新配置
    一个新的 docker 镜像并部署一个新的容器?

  • 带保险柜: envconsul如果您希望仅在启动时更改 secret ,那么您就是您的 friend 。

    有关我对配置值的运行时更改的看法,请参见上文。

    tl;dr 的实际执行是创建一个“启动”脚本,它是您的容器的入口点。启动脚本将从您选择的任何管理系统(卷挂载、Vault、文件等)中检索 secret ,并准备好它们以供您的应用程序读取。

    启动脚本然后启动您的主应用程序的运行过程。

    希望这可以帮助!

    PS:我不为 Hashicorp 工作,但我喜欢他们使用容器的软件。通过购买 Hashicorp 的不同软件可以获得很多东西,您也可以从 K8s 作为单一解决方案获得。单个应用程序 (Hashicorp) 允许您选择和混合您想要的解决方案,但也需要更高的维护开销。 K8s 是一个非常重的锁定,但不需要学习任何其他东西就可以完成您可能想要的大部分事情。

    祝你好运

    关于docker - Docker 容器中的配置管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42266352/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com