在构建图像时使用docker --squash在docker-compose中

问题描述 投票:9回答:2

在构建新的docker图像时,有没有办法在docker-compose中使用--squash选项?现在他们已经在6个月前在docker中实现了--squash,但我还没有看到任何关于如何在docker-compose.yml中使用它的文档。

这附近有工作吗? (我看到提出请求此feature的未决问题)

docker docker-compose dockerfile
2个回答
1
投票

您可以使用--squash而不是使用Docker multi-stage builds

这是一个使用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

为了使用这个文件来构建不同的图像,我们需要--targetdocker build标志。 --target的参数应该在Dockerfile中的AS关键字之后命名图像的名称。

构建基本映像:

docker build --target base --tag base .

构建测试图像:

docker build --target testing --tag testing .

构建文档图像:

docker build --target documentation --tag documentation .

这使您可以构建从同一基本图像分支的图像,这可以显着减少较大图像的构建时间。

您还可以在Docker Compose中使用多阶段构建。从docker-compose.yml版本3.4开始,您可以在YAML中使用target关键字。

这是一个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中构建documentationDockerfile图像。与任何其他docker-compose.yml一样,您还可以添加端口,环境变量,运行时命令等。


0
投票

你可以用诡计来实现壁球结果

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 / /
© www.soinside.com 2019 - 2024. All rights reserved.