Почему в Windows Azure образ докера, ориентированного на Windows, может работать как веб-приложение Linux? - PullRequest
1 голос
/ 19 июня 2019

Возможно, я не совсем понимаю докер, и думаю, именно поэтому я пишу этот пост. Насколько я понимаю, контейнер Linux в основном работает на ядре Linux, где Windows работает на Windows.

У меня есть следующие настройки:

*.csproj
<DockerDefaultTargetOS>Windows</DockerDefaultTargetOS>

DockerFile:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-nanoserver-1809 AS build
WORKDIR /src
...
...

Так что, в основном, он вытягивает Windows изображения. Все строится и работает локально (на самом деле я не могу заставить его работать с Linux из-за проблем с разрешениями, именно поэтому я выбрал Windows).

Приложение представляет собой веб-приложение .NET Core 2.2.

Затем я хотел настроить конвейер CI / CD в Azure Devops. Сложение:

pool:
  name: Hosted Windows 2019 with VS2019
steps:
- task: Docker@0
  displayName: 'Build an image'
  inputs:
    azureSubscription: 'MySubscription'
    azureContainerRegistry: 'myRegistry'
    dockerFile: API/Dockerfile
    defaultContext: False
    context: '$(System.DefaultWorkingDirectory)'
    imageName: 'reg/name:$(Build.BuildId)'

- task: Docker@0
  displayName: 'Push an image'
  inputs:
    azureSubscription: 'Subscription'
    azureContainerRegistry: 'myContainerRegistry'
    action: 'Push an image'
    imageName: 'reg/name:$(Build.BuildId)'

И опубликовать:

steps:
- task: Docker@0
  displayName: 'Push an image'
  inputs:
    azureSubscription: 'MySubscription'
    azureContainerRegistry: 'registry'
    action: 'Push an image'
    imageName: 'reg/name:$(Build.BuildId)'

Тогда странная часть, я понятия не имею, почему работает. Я хотел выпустить его, и, полагая, что это изображение Windows, это должен быть WebApp из этого списка:

App type selection list

Не удалось найти изображение, поэтому после некоторой путаницы я попытался просто изменить его на Linux Web App, в котором есть поля для поиска правильного изображения (из коробки), добавления его в реестр контейнера и т. Д. на - и это просто сработало. Это очень похоже на то, что конфиг WebApp - это классическое развертывание на zip, где Linux Web App на самом деле является скорее конфигурацией Docker App.

Я просто пытаюсь понять, почему это работает, и если я неправильно понял, что на самом деле делает Докер. Разве это не имеет значения, какой тип контейнера, если приложение кроссплатформенное, как .net core?

...