如何解决Dockerfile中的条件复制?
我有一个带有生产Dockerfile的应用程序,该文件将我们的源代码复制到容器中,即:
COPY . /app
我想将此复制设置为条件复制,以便传入CONTEXT=
环境变量可防止/允许执行此行。有可能吗?
我在这里看到related posts,但没有明确的答案。谢谢!
解决方法
不。您应该在构建最终图像之前对项目进行预处理。
多阶段构建可能会帮助您做到这一点:
FROM debian AS builder
ARG CONTEXT
WORKDIR /final
COPY . /app
RUN bash -c "[ '$CONTEXT' = '1' ] || cp -rfv /app/* /final/"
FROM debian
COPY --from=builder /final /app
在此示例中,传递--build-arg CONTEXT=1
可防止它填充最终图像中的/app
文件夹,从而将其从最终图像中删除。
从this post中,我发现Docker-Compose 3.7支持针对各个构建阶段。
所以我创建了一个包含两个阶段的Dockerfile,一个base
层用于设置容器,然后一个deploy
可以在代码库中复制:
# BUILD STAGE 1 - BASE
FROM webdevops/php-apache:7.2-alpine as base
# Do stuff
# BUILD STAGE 2 - DEPLOY
FROM base as deploy
# Add project
COPY . /app
# Do other stuff
然后,我将开发人员docker-compose.yml
配置为仅针对基本层,并为代码安装了卷。
version: "3.7"
services:
app.base.img:
build:
context: .
target: base
volumes:
- ./:/app
container_name: app.base
我的生产管道正常构建图像(包括两层)。
请注意,显然是3.7版声明。
这就是我想要的,感谢对此的所有评论和建议!如果您认为这是不明智的,请随时发表评论。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。