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
部分的服务。