gpt4 book ai didi

docker - 如何让 docker-compose 构建一次镜像并重复使用它来运行容器?

转载 作者:行者123 更新时间:2023-12-02 08:58:23 26 4
gpt4 key购买 nike

我正在尝试运行从同一镜像构建的多个容器。我的问题是当我这样定义我的 docker-compose.yml 时

version: '3'
services:
crossbar-target:
container_name: "app-crossbar-target"
build:
context: ../../crossbar

crossbar-source-domain1:
container_name: "app-crossbar-source-domain1"
build:
context: ../../crossbar

crossbar-source-domain2:
container_name: "app-crossbar-source-domain2"
build:
context: ../../crossbar

我会得到三个我想要的容器,但我也会得到三个图像。

如果我有数百个容器,我不喜欢也有数百个图像的想法。这使得我的本地镜像存储库完全无法使用且无法读取。

思考和寻找解决方案我尝试自行定义横杆图像,然后重用它:

version: '3'
services:
app-crossbar:
build:
context: ../../crossbar

crossbar-target:
container_name: "app-crossbar-target"
image: project_name/app-crossbar

crossbar-source-domain1:
container_name: "app-crossbar-source-domain1"
image: project_name/app-crossbar

crossbar-source-domain2:
container_name: "app-crossbar-source-domain2"
image: project_name/app-crossbar

现在,我只有一个用于所有容器的图像,但也获得了一个应用程序交叉开关容器。这也不符合我的需求。

有什么方法可以让docker-compose有效地管理我的图像并只制作我需要的图像,然后使用它们来运行所需数量的容器?或者我是否必须在其他例程中单独管理我的图像?我喜欢打电话:

docker-compose build

重建所有需要的图像,我喜欢将所有 docker 逻辑保存在一个地方的想法。

最佳答案

首先构建crossbar图像并正确标记它。然后您可以使用该镜像生成多个服务。这里的latest标签只是一个例子。我会使用唯一的版本号。

version: '3'
services:
app-crossbar:
image: crossbar:latest

crossbar-target:
image: crossbar:latest

crossbar-source-domain1:
image: crossbar:latest

crossbar-source-domain2:
image: crossbar:latest

预构建镜像(并可能将它们存储在 Docker 镜像存储库中)的一个巨大优势是,您可以在需要时恢复到旧版本。此外,如果需要,您可以使用预构建镜像运行测试。

有一个 CI 设置是相当标准的,例如 Jenkins 为您的 Crossbar 项目构建一个新镜像(当您推送分支时),正确标记它并将该镜像推送到您的私有(private)(或公共(public))图像存储库。

我想说,即使您可以使用 compose 构建图像,这仍然不是产品的正确方法。如果您扩展图像以添加带有配置文件的层,这可能是可以接受的。通过预构建镜像,您的管道还与 swarm 和其他集群环境兼容。

如果这对您的需求来说太过分了,您只需在本地构建(并正确标记图像)。标记部分很重要,因此您不必与 docker 缓存作斗争,并且如果需要恢复,您仍然可以找到旧版本。

(在开发环境中,您可以更加粗心,只需将目录和文件从主机映射到容器。没有人愿意为每一个更改都重新构建)

关于docker - 如何让 docker-compose 构建一次镜像并重复使用它来运行容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45326753/

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