gpt4 book ai didi

docker - 使用 Docker 管理开发/测试/生产环境

转载 作者:行者123 更新时间:2023-12-01 15:20:14 28 4
gpt4 key购买 nike

关于这个主题似乎有少量相互矛盾的信息。我是 Docker 的新手,需要一些帮助。我有几个 docker 容器来运行一个应用程序,有些容器需要不同的配置文件来进行本地开发,就像它们用于生产一样。我似乎无法找到一种巧妙的方法来使用 Docker 将其自动化。

我的包含自定义配置的容器是 Nginx、Freeradius,我的代码/数据容器是 Laravel,因此需要一个 .env.php 文件(目前是 L4.2)。

我在 docker compose 中尝试过 Dockers 环境变量:

docker-compose.yml:

freeradius:
env_file: ./env/freeradius.env

./env/freeradius.env

DB_HOST=123.56.12.123
DB_DATABASE=my_database
DB_USER=me
DB_PASS=itsasecret

除非我无法在 /etc/freeradius/mods-enabled/sql 中需要的地方选择这些变量。

我怎样才能让 Docker 作为具有本地配置的“本地”容器运行,或者作为具有生产配置的“生产”容器运行,而无需实际构建不同的容器,也无需附加到每个容器以手动配置它们.我需要它自动化,因为这最终将用于相当大的生产环境,该环境将拥有包含许多实例的大型服务器集群。

如果这是人们实现这一目标的方式,那么很高兴学习 Ansible。

最佳答案

如果您不能使用环境变量来配置应用程序(这是我对问题的理解),那么另一种选择是使用卷来提供配置文件。

您可以将“数据卷容器”(仅用于共享文件和目录的容器)与 volumes_from 一起使用,也可以使用命名卷。

数据卷容器

如果采用“数据卷容器”路线,您将创建一个包含所有环境配置文件的容器。每个需要文件的服务都使用 volumes_from: - config。在开发中你会有类似的东西:

configs:
build: dev-configs/

freeradius:
volumes_from:
- configs

dev-configs 目录将需要一个 Dockerfile 来构建镜像,它将有一堆用于所有配置的 VOLUME 指令路径。

对于生产(和其他环境),您可以创建一个覆盖文件,用不同的容器替换配置服务:

docker-compose.prod.yml:

configs:
build: prod-configs/

您可能还想在开发和生产之间更改其他设置,这些设置也可以放入此文件中。然后使用覆盖文件运行 compose:

docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

您可以在此处了解更多相关信息:http://docs.docker.com/compose/extends/#multiple-compose-files

命名卷

如果您使用“命名卷”路线,配置起来会更容易一些。在 dev 上,您使用 docker volume create thename 创建一个卷并将一些文件放入其中。在您的配置中,您可以直接使用它:

freeradius:
volumes:
- thename:/etc/freeradius/mods-enabled/sql

在生产环境中,您要么需要在每台主机上创建该命名卷,要么使用支持多主机的卷驱动程序插件(我相信 flocker 就是其中一个例子)。

使用 Dockerize 的运行时配置

最后,另一个不涉及卷的选项是使用 https://github.com/jwilder/dockerize它允许您在运行时从环境变量生成配置。

关于docker - 使用 Docker 管理开发/测试/生产环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33894448/

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