假设我有这个项目结构:
proj/
??? docker
? ??? myservice
? ??? Dockerfile
??? docker-compose.yml
Run Code Online (Sandbox Code Playgroud)
这是我的docker-compose.yml:
version: '3'
services:
master:
build: docker/myservice
slave:
image: proj_master
depends_on: master
Run Code Online (Sandbox Code Playgroud)
我希望该master服务创建一个映像,该映像将由master和slave服务使用(具有不同的参数,此处未显示)。通过反复试验,我发现从属必须引用该映像proj_master。
proj?通常docker composer文件与它的位置无关...Ale*_*ler 10
此功能称为扩展字段。
你可以将你的奴隶链接到你的主人。
django_project:
&django_project
image: python:3.7.6-alpine
command: ....
django_project_task1:
<<: *django_project
command: /start-task1.sh
django_project_task2:
<<: *django_project
command: /start-task2.sh
Run Code Online (Sandbox Code Playgroud)
现在所有共享相同的源,但使用不同的命令启动。
此外,您还必须了解一件事。
由于 Docker 使用“层”,您的 Dockerfile 不会为每个“子进程”重新编译,并且卷大小将缩小。
另请查看这篇关于在一个容器中运行多个进程的文章。
很酷的黑客,是吧?
docker-compose.yaml如果您在镜像中使用以下语法,则主镜像将构建一次,然后由从镜像使用:
version: '3'
services:
master:
build: docker/myservice
image: master-image:3
slave:
image: master-image:3
Run Code Online (Sandbox Code Playgroud)
Docker Compose使用名称构建映像proj_master,因为您没有master在Compose文件中的服务下指定映像名称。
您有build一部分,因此Docker Compose将构建映像并根据您的名称为其命名<directory_name_where_you_run_compose>_<service_name>:latest。我没有在文档中找到它,但是尝试了我的一个项目,它与您的经验相符。
您可以通过在Compose文件中指定图像名称并对两个服务使用相同的图像来修复项目:
version: '3'
services:
master:
build: docker/myservice
image: username/masterimage:version
slave:
image: username/masterimage:version
depends_on: master
Run Code Online (Sandbox Code Playgroud)
services:\n master:\n image: master-image\n pull_policy: never\n build: docker/myservice\n\n slave:\n image: master-image\n pull_policy: never\nRun Code Online (Sandbox Code Playgroud)\n如果没有pull_policy,docker compose可以工作,但对从站显示红色错误,对主站显示警告:
\xc2\xa0\xe2\xa0\xbf 从站拉动
\n\xc2\xa0\xe2\xa0\xbf 主站拉动
\xc2\xa0\xe2\xa0\xbf 从站错误
\n\xc2\xa0\xe2\xa0\xbf 主站警告
更多信息:https://github.com/docker/compose/issues/9820,https : //docs.docker.com/compose/compose-file/#pull_policy
\n\n\npull_policy:从不
\n
\nCompose 实现不应从注册表中提取映像 [...]
其他备注:
\ndepends_on在这种情况下不需要( “表达服务之间的启动和关闭依赖关系”),请参阅https://docs.docker.com/compose/compose-file/#depends_onversion: \'3\',此字段已弃用https://github.com/compose-spec/compose-spec/blob/7d5c7c88676ac240b6b037f868c04b33f738d82a/spec.md#compose-file并且 \nit 相当于而\'3.0\'不是使用最新的次要版本https://docs.docker.com/compose/compose-file/compose-versioning/#version-3| 归档时间: |
|
| 查看次数: |
2553 次 |
| 最近记录: |