gpt4 book ai didi

docker - 在 shell 脚本上使用 docker-compose 文件版本 3 的优势?

转载 作者:行者123 更新时间:2023-12-02 18:11:40 25 4
gpt4 key购买 nike

我创建 docker-compose.yml 的最初原因是为了利用诸如 build: 之类的特性。和 depends-on:制作一个文件来构建我的所有图像并在容器中运行它们。但是,我注意到版本
3 贬低了这些函数中的大部分,我很好奇为什么我会使用它而不是构建 shellscript。

这是当前运行我所有容器的 shellscript(我假设这是版本 3 docker-compose 文件将替换的内容,如果我要使用它):

echo "Creating docker network net1"
docker network create net1

echo "Running api as a container with port 5000 exposed on net1"
docker run --name api_cntr --net net1 -d -p 5000:5000 api_img

echo "Running redis service with port 6379 exposed on net1"
docker run --name message_service --net net1 -p 6379:6379 -d redis

echo "Running celery worker on net1"
docker run --name celery_worker1 --net net1 -d celery_worker_img

echo "Running flower HUD on net1 with port 5555 exposed"
docker run --name flower_hud --net net1 -d -p 5555:5555 flower_hud_img

docker-swarm 是否依赖于使用堆栈?如果是这样,那么我可以看到 docker-compose 和 stacks 的用途,但我似乎无法在网上找到答案。我会使用版本 3,因为它与 swarm 兼容,不像版本 2,如果我读过的话。也许我完全错过了 docker-compose 的重点,但就我而言,我对它带来的内容感到有些困惑。

最佳答案

可读性

将您的示例 shell 脚本与相同的 YAML 版本进行比较:

services:
api_cntr:
image: api_img
network: net1
ports:
- 5000:5000
message_service:
image: redis
network: net1
ports:
- 6379:6379
celery_worker1:
image: celery_worker_img
network: net1
flower_hud:
image: flower_hud_img
network: net1
ports:
- 5555:5555

至少在我看来,通过读取 YAML 来确定应用程序的整体架构要比通过读取 shell 命令容易得多。

清理

如果您使用 docker-compose,则运行 docker-compose down将停止并清理所有内容,删除网络等。要在您的 shell 脚本中执行此操作,您必须单独编写一个删除部分来停止和删除所有容器和网络。

多个继承 YAML 文件

在某些情况下,例如对于开发和测试,您可能需要一个主 YAML 文件和另一个覆盖开发/测试工作的某些值。

例如,我有一个应用程序,其中有一个 docker-compose.yml以及 docker-compose.dev.yml .第一个包含我的应用程序的所有生产设置。但是“开发”版本的内容更为有限。它使用相同的服务名称,但有一些不同。
  • 将我的代码目录的装载添加到容器中,覆盖内置于图像中的代码版本
  • 在外部公开 postgres 端口(因此我可以出于调试目的连接到它)- 这在生产中未公开
  • 使用另一个安装来伪造用户数据库,这样我就可以轻松地拥有一些测试用户,而无需将东西连接到我的真实身份验证服务器上,仅用于开发

  • 通常服务只使用 docker-compose.yml (生产中)。但是当我在做开发工作时,我是这样运行的:
    docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d

    它将加载来自 docker-compose.yml 的正常参数首先,然后阅读 docker-compose.dev.yml其次,仅覆盖在 dev 文件中找到的参数。其他参数都保留在生产版本中。但是我不需要两个完全独立的 YAML 文件,我可能需要在这两个文件中更改相同的参数。

    易于维护

    我在最后几段中描述的所有内容都可以使用 shell 脚本来完成。这样做只是需要更多的工作,而且可能更难以维护,并且更容易出错。

    你可以通过让你的 shell 脚本读取一个配置文件等来让它更容易......但是在某些时候你必须问你是否只是重新实现你自己的 docker-compose 版本,以及这对你来说是否值得。

    关于docker - 在 shell 脚本上使用 docker-compose 文件版本 3 的优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45175126/

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