Docker 在 Windows Server 2016平臺下 .Net Core的鏡像問題

 

2017年年初,docker公司將原先的docker項目更名爲moby,並建立了docker-ce和docker-ee。html

這三者的關係是:web

moby是繼承了原先的docker的項目,是社區維護的的開源項目,誰均可以在moby的基礎打造本身的容器產品。 docker

docker-ce是docker公司維護的開源項目,是一個基於moby項目的免費的容器產品 。shell

docker-ee是docker公司維護的閉源產品,是docker公司的商業產品。 json

 

一,Docker 的安裝windows

Windows 安裝  Docker 官方文檔: https://docs.microsoft.com/zh-cn/virtualization/windowscontainers/quick-start/quick-start-windows-serverapi

Docker 在不一樣Windows版本的系統上安裝,安裝方法是有差別的。服務器

1,在Win10 的安裝網絡

在 Docker 官方網站 上註冊一個帳號,下載程序進行安裝就能夠了,整個過程只有兩步,比較簡單。app

2,在Windows Server 2016操做系統上

Windows Server 版本,只能安裝Docker EE版本。

a,在安裝Docker以前,更新操做系統的全部補丁,具體操做方法以下:

在CMD窗口,或者Powershell窗口輸入  sconfig 命令,彈出以下窗口:

選擇 【6】,再選擇【A】,對操做系統的全部補丁進行更新

 

b,而後,進入PowerShell窗口,安裝  Nuget

Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force #指定Nuget安裝包最小版本

c, 進入PowerShell窗口,用命令行安裝 Docker  (摘自:https://q.cnblogs.com/q/104529/

Install-Module DockerProvider -Force

Install-Package Docker -ProviderName DockerProvider -Force

或者

Install-Module -Name DockerMsftProvider -Force #安裝docker模塊

Install-Package -Name docker -ProviderName DockerMsftProvider -Force #安裝docker包

 d,從新啓動電腦

Restart-Computer -Force #從新啓動

備註:在安裝的過程,會出現一個意外,找不到 「 C:\Users\ADMINI~1\AppData\Local\Temp\2\DockerMsftProvider\docker-19-03-1.zip 」 文件。

解決方法:

a, 找到配置文件   「C:\Users\ADMINI~1\AppData\Local\Temp\2\DockerMsftProvider\DockerDefault_DockerSearchIndex.json」  ,查找缺失文件對應的網絡路徑,把文件下載到本地。

c, 執行更新命令     

Find-Package – ProviderName DockerMsftProvider | Install-Package -Verbose

安裝完成後,能夠經過 docker version命令查看相關版本信息 。

二,Docker 製做鏡像文件

1,製做一個鏡像文件:

docker build -t dockerdemo03 .         # 這個命令的後邊,必定要有一個圓點

  b,根據一個鏡像文件,運行一個容器  

docker run -d -p 9990:80 dockerdemo03

容器運行成功後,能夠經過以下IP進行訪問:

http://10.0.75.1:9990/api/values
 
c,也能夠經過配置路由規則的方式,用本機IP訪問:
#route print 192.168.11.89
route -p add 192.168.11.89 MASK 255.255.255.240 10.0.75.1
#route delete 192.168.11.89

http://192.168.11.89:9990/api/values

不當心,刪除了默認的路由規則,能夠用以下命令恢復本機電腦的默認路由:
方式一:
netsh int ipv4 reset

方法二(摘自:https://www.cnblogs.com/KeenLeung/p/3511233.html):

netsh winsock reset catalog
netsh int ip reset reset.log hit

重啓電腦後生效。

備註:

一些基本Docker操做命令

docker images                      查看鏡像文件
docker ps  -a                        查看全部容器的運行記錄,以異常方式退出的容器將具備非零狀態代碼
docker ps                             查看正在運行的容器
docker stop <container-id>  中止某個容器
docker kill  <container-id>  殺掉某個容器
docker rm <container-id>    刪除某個容器
docker rmi <image-id>        刪除某個鏡像

三,docker 鏡像的 PUSH,PULL(深坑)

 

如今,如今我要把這個鏡像文件發佈到服務,個人思路是:先把鏡像文件 PUSH 到Docker的倉庫,再到服務器上把這個鏡像文件拉取下來。

1,把鏡像文件PUSH到倉庫:

用本身註冊的帳號登陸到Docker 

把鏡像文件推送到倉庫

#給鏡像文件取一個別名
docker tag bbbf62ce2eaf xcj26/webapp22
#把鏡像文件推送到倉庫
docker push xcj26/webapp22 

 推送成功。

2,服務器PULL 鏡像文件:

進入到服務器(Window Server 2016)的Docker ,登陸並拉取剛纔PUSH的鏡像文件:

docker pull xcj26/webapp22  #拉取鏡像文件

錯誤信息提示爲:

a Windows version 10.0.17134-based image is incompatible with a 10.0.14393 host

顯示操做系統的版本不兼容

=====換個思路=====

我把本地的程序發佈成本地文件,而後拷貝到服務器,再建立 Dockerfile 生成鏡像文件。

 

 也是一樣的問題

a Windows version 10.0.17134-based image is incompatible with a 10.0.14393 host

查閱了不少資料,最有用的就是以下這兩個信息:

stackoverflow:https://stackoverflow.com/questions/54229367/dockers-image-and-host-are-incompatible

windows 容器的兼容性:https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility

大體意思是 基礎鏡像庫(FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-nanoserver-1803 AS base)不支持在Windows Server 2016(10.0.14393) 服務器上運行。 可是支持在Win 10(10.爲。17134)電腦上運行。

在Win 10電腦上用Docker環境上開發一個程序,而不能在自家的服務器Window Server 2016上運行。

 

補充:

https://hub.docker.com/_/microsoft-dotnet-core-aspnet/ docker pull mcr.microsoft.com/windows/servercore:1903 no matching manifest for windows/amd64 10.0.14393 in the manifest list entriesdocker pull mcr.microsoft.com/windows/servercore:1803no matching manifest for windows/amd64 10.0.14393 in the manifest list entriesdocker pull microsoft/windowsservercoredocker pull nanoserver/iis

相關文章
相關標籤/搜索