在构建新的docker镜像时,有没有办法在docker-compose中使用--squash
选项?现在他们已经在6个月前在docker中实现了--squash
,但我还没有看到任何关于如何在docker-compose.yml中使用它的文档。
这里有工作吗? (我看到提出请求此feature)的未决问题
答案 0 :(得分:1)
您可以使用Docker multi-stage builds来代替--squash
。
这是使用Django Web框架的Python应用程序的简单示例。我们希望将测试依赖项分离到不同的映像中,以便我们不将测试依赖项部署到生产中。此外,我们希望将自动化文档实用程序与测试实用程序分开。
这里是Dockerfile
:
# the AS keyword lets us name the image
FROM python:3.6.7 AS base
WORKDIR /app
RUN pip install django
# base is the image we have defined above
FROM base AS testing
RUN pip install pytest
# same base as above
FROM base AS documentation
RUN pip install sphinx
为了使用此文件生成不同的图像,我们需要--target
的{{1}}标志。 docker build
的参数应在Dockerfile中的--target
关键字之后命名图像的名称。
建立基础图片:
AS
构建测试图像:
docker build --target base --tag base .
构建文档图像:
docker build --target testing --tag testing .
这使您可以构建从同一基本图像分支的图像,从而可以大大减少较大图像的构建时间。
您还可以在Docker Compose中使用多阶段构建。从docker build --target documentation --tag documentation .
的3.4版本开始,您可以在YAML中使用docker-compose.yml
关键字。
这是一个引用以上target
的{{1}}文件:
docker-compose.yml
如果使用此Dockerfile
运行version: '3.4'
services:
testing:
build:
context: .
target: testing
documentation:
build:
context: .
target: documentation
,它将在docker-compose build
中生成docker-compose.yml
和testing
图像。与任何其他documentation
一样,您也可以添加端口,环境变量,运行时命令等。
答案 1 :(得分:0)
Yu可以用类似的技巧达到蹲点的效果
FROM oracle AS needs-squashing
ENV NEEDED_VAR some_value
COPY ./giant.zip ./somewhere/giant.zip
RUN echo "install giant in zip"
RUN rm ./somewhere/giant.zip
FROM scratch
COPY --from=needs-squashing / /