我可能无法完全理解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:
它找不到图像,所以经过一番摆弄之后,我尝试将其更改为Linux Web App
,它具有用于实际查找正确图像(开箱即用)的字段,并将其添加到容器注册表中依此类推-它才有效。 WebApp配置非常像经典的zip部署,而Linux Web App实际上更像是“ Docker App”配置。
我只是想了解它为什么起作用,如果我严重误解了Docker的实际功能。只要应用程序是跨平台(如.net core)的容器类型,就根本无关紧要吗?