Wax*_*age 5 docker docker-compose
我试图运行从同一图像构建的多个容器.我的问题是当我用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
Run Code Online (Sandbox Code Playgroud)
我会得到三个容器,但我也得到三个图像.
如果我有数百个容器,我不喜欢有数百个图像的想法.这使我的本地图像存储库完全无法使用且无法读取.
思考和搜索解决方案我尝试自己定义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
Run Code Online (Sandbox Code Playgroud)
现在,我只有一个容器的图像,但也获得了一个app-crossbar容器.这也不符合我的需要.
有没有办法有效地docker-compose管理我的图像,只制作我需要的图像,然后使用它们运行所需的任何数量的容器?或者我是否必须在其他一些例程中单独管理我的图像?我喜欢打电话:
docker-compose build
Run Code Online (Sandbox Code Playgroud)
重建所有需要的图像,我喜欢我的所有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
Run Code Online (Sandbox Code Playgroud)
预先构建图像(以及可能将它们存储在docker image repo中)的一个巨大优势是,您可以在需要时恢复到旧版本.此外,如果需要,您可以使用预构建映像运行测试.
拥有CI设置非常标准,例如Jenkins构建crossbar项目的新图像(当您推动分支时),正确地标记它将图像推送到您的私人(或公共)图像仓库.
我会说,即使你可以用compose构建图像,这仍然不是生产它的正确方法.如果扩展图像以添加包含配置文件的图层,则可以接受.通过预先构建图像,您的管道也可以与swarm和其他集群环境兼容.
如果这对您的需求来说太过分了,那么您只需在本地构建(并正确标记图像).标记部分很重要,因此您不必与docker缓存竞争,如果需要还原,您仍然可以找到旧版本.
(在开发环境中,您可以更加粗心,只需在主机到容器的目录和文件中进行映射.没有人希望为每个更改重新构建)
| 归档时间: |
|
| 查看次数: |
3851 次 |
| 最近记录: |