微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Dockerfile中的条件复制?

如何解决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版声明。

这就是我想要的,感谢对此的所有评论和建议!如果您认为这是不明智的,请随时发表评论。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。