Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 为什么这个docker compose文件四次构建相同的图像?_Django_Docker_Docker Compose - Fatal编程技术网

Django 为什么这个docker compose文件四次构建相同的图像?

Django 为什么这个docker compose文件四次构建相同的图像?,django,docker,docker-compose,Django,Docker,Docker Compose,当我在下面的docker compose文件上运行docker compose build时,它为带有芹菜的django服务器构建了四次相同的映像(对于web服务、celeryworker、celerybeat和flower) 整个过程重复四次 我认为从docker compose中的其他服务描述继承的意义在于,您可以为不同的服务重用相同的映像 如何在其他服务中重用web映像,以减少75%的构建时间? version: '3' services: web: &django

当我在下面的
docker compose
文件上运行
docker compose build
时,它为带有芹菜的django服务器构建了四次相同的映像(对于
web
服务、
celeryworker
celerybeat
flower

整个过程重复四次

我认为从docker compose中的其他服务描述继承的意义在于,您可以为不同的服务重用相同的映像

如何在其他服务中重用
web
映像,以减少75%的构建时间?

version: '3'

services:
  web: &django
    image: myorganisation/myapp
    container_name: myapp_web
    build:
        context: .
        dockerfile: ./compose/local/django/Dockerfile
        # This is a multistage build installing private dependencies, hence this arg is needed
        args:
          PERSONAL_ACCESS_TOKEN_GITHUB: ${PERSONAL_ACCESS_TOKEN_GITHUB}
    command: /start
    volumes:
      - .:/app
    ports:
      - 8000:8000
    depends_on:
      - db
      - redis
    environment:
      - DJANGO_SETTINGS_MODULE=backend.settings.local
      - DATABASE_URL=postgres://postgres_user:postgres_password@db/postgres_db
      - REDIS_URL=redis://:redis_password@redis:6379
      - CELERY_FLOWER_USER=flower_user
      - CELERY_FLOWER_PASSWORD=flower_password
    env_file:
      - ./.env

  celeryworker:
    <<: *django
    container_name: myapp_celeryworker
    depends_on:
      - redis
      - db
    ports: []
    command: /start-celeryworker

  celerybeat:
    <<: *django
    container_name: myapp_celerybeat
    depends_on:
      - redis
      - db
    ports: []
    command: /start-celerybeat

  flower:
    <<: *django
    container_name: myapp_flower
    ports:
      - 5555:5555
    command: /start-flower

volumes:
  postgres_data:
    driver: local
  pgadmin_data:
    driver: local
版本:“3”
服务:
web:&django
图片:MyOrganization/myapp
容器名称:myapp\u web
建造:
上下文:。
dockerfile:./compose/local/django/dockerfile
#这是一个安装私有依赖项的多阶段构建,因此需要此参数
args:
个人访问令牌GITHUB:${PERSONAL访问令牌GITHUB}
命令:/start
卷数:
-.:/app
端口:
- 8000:8000
取决于:
-分贝
-雷迪斯
环境:
-DJANGO_设置_模块=backend.SETTINGS.local
-数据库地址=postgres://postgres_user:postgres_password@db/postgres_db
-REDIS_URL=REDIS://:REDIS_password@redis:6379
-芹菜花用户=花用户
-芹菜花密码=花密码
环境文件:
-./环境
芹菜工人:

因为您在所有服务中指定了
build
部分(使用
django
anchor),所以它是为每个服务构建的


如果希望对所有服务使用相同的映像,但只生成一次,则可以仅在一个首先启动的服务中指定
build
部分(即,没有依赖项的服务)然后在其他服务中只指定
image
字段而不指定
build
部分,并使这些服务依赖于构建映像的第一个服务。

因此在其他服务中重复
image:myorganization/myapp
,但丢失
yes。基本上在一个服务中有
build
部分,在所有服务中重复
image
,使所有服务依赖于具有
build
部分的服务。