В Docker, как мне построить для разных версий ОС windowsservercore

Я пытаюсь создать свое приложение с помощью докера, но мне нужно настроить таргетинг на windowsservercore-ltsc2016 (Windows 2016), windowsservercore-1709 и windowsservercore-1803.

Единственное, что я могу придумать, это отдельный файл докеров для каждой архитектуры, но это не значит, что его легко обновить, если в будущем произойдут изменения. Изменения должны быть внесены в n файлов.

Кроме того, существует ли автоматический способ, когда вы запускаете, скажем, файл для создания докеров, чтобы легко понять, что вы используете версию 1803, и использовать ее, или лучше снова создать файл для создания докеров для используемой вами архитектуры.


person StonesBG    schedule 13.07.2018    source источник
comment
Microsoft использует разные файлы докеров для каждой архитектуры. Например, вы можете увидеть, как они это делают для ядра dotnet (github. com/dotnet/dotnet-docker/tree/master/2.1/runtime). Ваш базовый образ будет автоматически подобран на основе вашего клиента, поэтому, если вы просто поставите windowsservercore, он вытянет 1803, если вы используете 1803, или ltsc, если вы используете ltsc.   -  person Gregory Suvalian    schedule 13.07.2018


Ответы (1)


Передайте аргументы в файл dockerfile, затем выполните соответствующие действия на основе переменной TARGETOS. Это работает в Linux, для Windows, я думаю, это похоже, просто дам вам некоторые мысли.

Командная команда:

export TARGETOS=windowsservercore-1803
docker-compose build

docker-compose.yml:

services:
  my_name:
     build:
       context: .
       args:
         - TARGETOS

Файл Docker:

ARG TARGETOS
ENV TARGETOS ${TARGETOS}

# do things based on TARGETOS arg
# RUN if [ ${TARGETOS} = "windowsservercore-1803" ]; then \
person atline    schedule 13.07.2018