Избегайте дублирования Dockerfile - PullRequest
1 голос
/ 06 мая 2020

Я работаю над приложением. NET Core, которое поставляется через Docker. Моя среда разработки - это машина Windows, использующая Linux контейнеров. Производственная среда - это Raspberry Pi.

Поскольку архитектуры между разработкой и производством различаются (x64 против ARM), у меня есть два разных файла Docker, которые отличаются только в одной строке (базовый образ) :

  • Разработка на 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)?

1 Ответ

5 голосов
/ 06 мая 2020

Для таких простых замен строк вы можете использовать Dockerfile ARG. Если вы используете это для установки FROM базового изображения, его необходимо указать перед любыми FROM строками . (Для других целей его нужно указывать после строки 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 не имеет никаких условий или возможностей включения файлов, кроме этого.

...