1. 程式人生 > >.NET Core 在 Docker 環境下的坑有點深

.NET Core 在 Docker 環境下的坑有點深

一,Docker 的安裝

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

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

1,在Win10 的安裝

在 官方網站 上註冊一個賬號,下載程式進行安裝就可以了,整個安裝過程絕比安裝一個QQ要簡單很多。

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 版本相關資訊。

二,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上執行,這坑有點深。