为什么Windows定位的docker映像可以在Azure中作为Linux Web App运行?

时间:2019-06-19 11:18:03

标签: azure docker azure-devops

我可能无法完全理解docker,我想这就是为什么我要发表这篇文章。据我了解,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 WebApp。

然后,我想在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映像,所以它必须是此列表中的WebApp:

App type selection list

它找不到图像,所以经过一番摆弄之后,我尝试将其更改为Linux Web App,它具有用于实际查找正确图像(开箱即用)的字段,并将其添加到容器注册表中依此类推-它才有效。 WebApp配置非常像经典的zip部署,而Linux Web App实际上更像是“ Docker App”配置。

我只是想了解它为什么起作用,如果我严重误解了Docker的实际功能。只要应用程序是跨平台(如.net core)的容器类型,就根本无关紧要吗?

0 个答案:

没有答案