gpt4 book ai didi

Docker Compose 覆盖

转载 作者:行者123 更新时间:2023-12-04 21:34:33 28 4
gpt4 key购买 nike

我有两个 Docker Compose 文件,docker-compose.yml看起来像这样

version: '2'
services:
mongo:
image: mongo:3.2
restart: always
volumes:
- /mnt/data/mongodb/data/db:/data/db
redis:
image: redis:3
restart: always
application:
build: .
image: localregistry:5000/mz_application:latest
ports:
- "3000:3000"
links:
- mongo:mongo
- redis:redis
restart: always

以及我进行部署时使用的另一个文件 docker-deploy.yml
version: '2'
services:
application:
image: localregistry5000/mz_application:latest
links:
- mongo:mongo
- redis:redis
restart: always

nginx:
restart: always
build: ./nginx/
ports:
- "80:80"
volumes_from:
- application
restart: always
links:
- application:application
command: /bin/bash -c "nginx -g 'daemon off;'"
tty: false

所以使用这些文件的想法如下。当我跑
docker-compose build

它构建一个镜像并将其推送到我们的本地 docker 注册表。
docker-compose -f docker-compose.yml -f docker-deploy.yml build &&
docker-compose -f docker-compose.yml -f docker-deploy.yml up -d

部署和运行 application从本地注册表中提取而不是重建。

不幸的是它会重建它,因为当我覆盖 application 时, build仍然存在,因为它取自 docker-compose.yml文件。
如何删除它?有没有办法做到这一点 - 使用一个 docker-compose 文件构建和推送和镜像,然后仅使用 docker compose 文件覆盖拉取?

最佳答案

首先,如果你让我,我发现了几件事情需要考虑。我不知道你为什么要拥有相同的两个构建目标图像,但无论如何,我会尽量回答解决方案,而不是问你为什么要这样做。

  • 更改图像名称可以构建不同的图像。例如,也许您可​​以尝试使用“deploy-version”。
  • 如果您不想更改图像名称,因为您喜欢(我不知道为什么)构建它两次,您可以尝试以下命令,在撰写文件中设置不同的 container_name:

  • Furthermore, note that in your docker-deploy.yml file, for application service, you're not defining build section, so, docker-compose -f docker-deploy.yml build will build image with default Dockerfile and path: .


    services:
    application:
    build: .
    image: localregistry:5000/mz_application:latest
    ports:
    - "3000:3000"
    links:
    - mongo:mongo
    - redis:redis
    restart: always
    container_name: app_compose
    services:
    application:
    image: localregistry:5000/mz_application:latest
    links:
    - mongo:mongo
    - redis:redis
    restart: always
    container_name: app_deploy
  • 考虑到应该使用不同的图像定义多个 docker-compose 构建。也许您正在尝试部署 来自同一图像的不同容器 .我看到两个 docker-compose 文件中应用程序服务定义之间的唯一区别是 港口申报 , 因为 build: .和什么都不放一样。
    当您使用 docker-compose build命令,它忽略 ports:部分。当您使用 docker-compose up命令,它忽略 build:部分。

  • 明确地说,如果你想在不重建避免图像重写的情况下启动一个具体的服务,你也可以这样做:
    docker-compose -f docker-compose.yml build
    docker-compose -f docker-deploy.yml run -d nginx /bin/bash -c "nginx -g 'daemon off;'"

    关于Docker Compose 覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41986932/

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