【发布时间】:2018-10-31 23:59:03
【问题描述】:
如何在docker-compose.yml 中指定多阶段构建?
对于每个变体(例如 dev、prod...),我都有一个包含 2 个 docker 文件的多阶段构建:
- 开发:
Dockerfile.base+Dockerfile.dev - 或产品:
Dockerfile.base+Dockerfile.prod
文件Dockerfile.base(所有变体通用):
FROM python:3.6
RUN apt-get update && apt-get upgrade -y
RUN pip install pipenv pip
COPY Pipfile ./
# some more common configuration...
文件Dockerfile.dev:
FROM flaskapp:base
RUN pipenv install --system --skip-lock --dev
ENV FLASK_ENV development
ENV FLASK_DEBUG 1
文件Dockerfile.prod:
FROM flaskapp:base
RUN pipenv install --system --skip-lock
ENV FLASK_ENV production
没有 docker-compose,我可以构建为:
# Building dev
docker build --tag flaskapp:base -f Dockerfile.base .
docker build --tag flaskapp:dev -f Dockerfile.dev .
# or building prod
docker build --tag flaskapp:base -f Dockerfile.base .
docker build --tag flaskapp:dev -f Dockerfile.dev .
根据compose-file doc,我可以指定一个Dockerfile来构建。
# docker-compose.yml
version: '3'
services:
webapp:
build:
context: ./dir
dockerfile: Dockerfile-alternate
但是如何在 docker-compose.yml 中指定 2 个 Dockerfile(用于多阶段构建)?
【问题讨论】:
-
多阶段构建是单个 Dockerfile。 docs.docker.com/develop/develop-images/multistage-build
-
我确实可以在所有其他 docker 文件中复制/粘贴通用的第一阶段 docker 文件,但我想避免重复代码(即保留 2 个 docker 文件)。不确定是否支持
标签: docker docker-compose