为什么针对windows的docker映像可以在azure中作为Linux Web应用程序运行?

为什么针对windows的docker映像可以在azure中作为Linux Web应用程序运行?,azure,docker,azure-devops,Azure,Docker,Azure Devops,我可能不完全理解docker,我想这就是我写这篇文章的原因。据我所知,linux容器基本上运行在linux内核上,而windows one运行在windows上 我有以下设置: *.csproj <DockerDefaultTargetOS>Windows</DockerDefaultTargetOS> 所以基本上它会拉取窗口图像。所有东西都在本地构建和工作(事实上,由于权限问题,我无法让它在Linux上运行,这就是为什么我首先选择Windows的原因) 该应用程序是一

我可能不完全理解docker,我想这就是我写这篇文章的原因。据我所知,linux容器基本上运行在linux内核上,而windows one运行在windows上

我有以下设置:

*.csproj
<DockerDefaultTargetOS>Windows</DockerDefaultTargetOS>
所以基本上它会拉取
窗口
图像。所有东西都在本地构建和工作(事实上,由于权限问题,我无法让它在Linux上运行,这就是为什么我首先选择Windows的原因)

该应用程序是一个.NETCore2.2WebApp

然后我想在Azure Devops中设置我的CI/CD管道。建造:

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映像,它必须是以下列表中的一个Web应用程序:

它找不到图像,所以在做了一些修改后,我尝试简单地将其更改为
Linux Web App
,其中包含用于实际查找正确图像的字段(开箱即用),将其添加到容器注册表中,等等,但效果很好。看起来WebApp配置很像是经典的zip部署,而Linux Web App实际上更像是一种“Docker App”配置

我只是想弄明白为什么会这样,如果我严重误解了Docker的实际工作。只要应用程序像.net core一样是跨平台的,那么容器类型是什么就无关紧要了吗

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