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