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


 

2017年年初,docker公司將原先的docker項目改名為moby,並創建了docker-ce和docker-ee。

這三者的關系是:

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

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

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

 

一,Docker 的安裝

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

Docker 在不同Windows版本的系統上安裝,安裝方法是有差異的。

1,在Win10 的安裝

在 Docker 官方網站 上注冊一個賬號,下載程序進行安裝就可以了,整個過程只有兩步,比較簡單。

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 entries

docker pull mcr.microsoft.com/windows/servercore:1803
no matching manifest for windows/amd64 10.0.14393 in the manifest list entries

docker pull microsoft/windowsservercore
docker pull nanoserver/iis


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM