【问题标题】:Avoid duplicate Dockerfile避免重复的 Dockerfile
【发布时间】:2020-08-21 15:17:18
【问题描述】:

我正在开发一个通过 Docker 发布的 .NET Core 应用程序。我的开发环境是使用 Linux 容器的 Windows 机器。生产环境是树莓派。

由于开发和生产之间的架构不同(x64ARM),我有两个不同的 Dockerfile,它们仅在一行(基础映像)上有所不同:

  • x64上开发:FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
  • ARM: FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim-arm32v7 AS base 上生产

是否可以避免两个不同的文件?如果是,我该怎么做?是否有可能有类似if 的东西,或者我可以引用另一个文件(例如Dockerfile.common)?

【问题讨论】:

    标签: c# docker asp.net-core .net-core raspberry-pi


    【解决方案1】:

    对于像这样的简单字符串替换,您可以使用 Dockerfile ARG。如果您使用它来设置FROM 基本映像,it needs to be specified before any FROM lines。 (对于其他用途,需要在每个需要它的图像阶段的FROM 行之后指定。)

    ARG BASE_IMAGE=mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim
    FROM ${BASE_IMAGE} AS base
    

    如果您在 ARM 上构建,那么您需要提供 docker build --build-arg option

    docker build \
      --build-arg BASE_IMAGE=mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim-arm32v7 \
      .
    

    除此之外,Docker 没有任何条件或文件包含功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多