您的位置:首頁 >生活 >

.NETCore項目在Windows下構建Docker鏡像并本地導出分發(fā)到CentOS系統下_環(huán)球新消息

2023-06-26 18:16:58 來源:博客園

在Windows下使用Docker,我們選擇Docker Desktop這個軟件,非常方便。

Docker Desktop介紹及安裝

Docker Desktop是適用于Mac、Linux或Windows環(huán)境的一鍵安裝應用程序,使您能夠構建和共享容器化應用程序和微服務。它提供了一個簡單的GUI(圖形用戶界面),允許您直接從機器管理容器、應用程序和圖像。Docker Desktop既可以單獨使用,也可以作為CLI的補充工具。Docker Desktop減少了在復雜設置上花費的時間,因此您可以專注于編寫代碼。它負責端口映射、文件系統問題和其他默認設置,并定期更新錯誤修復和安全更新。安裝Docker Desktop后,默認安裝了以下組件:


(資料圖片)

Docker EngineDocker CLI clientDocker BuildxExtensionsDocker ComposeDocker Content TrustKubernetesCredential Helper

Docker Desktop可與您選擇的開發(fā)工具和語言配合使用,并使您能夠訪問Docker Hub中的大量認證圖像和模板庫。這使開發(fā)團隊能夠擴展他們的環(huán)境,以便使用安全的存儲庫快速自動構建、持續(xù)集成和協作。官網地址

項目編譯

發(fā)布項目運行框架為.net6.0,運行環(huán)境為linux-x64

Dockerfile內容及國內鏡像源

Dockerfile是用來構建docker鏡像的構建文件,它其實就像一個腳本文件,里面可以執(zhí)行一些命令,通過它就可以指定或下載構建的鏡像所需要的一些組件,然后打包成鏡像文件。下面是本教程使用的Dockerfile腳本文件內容,指定了使用asp.net6.0的運行時環(huán)境,并且在鏡像系統的5000端口上提供http服務。同時更新sources.list使用國內鏡像源,這里沒有用阿里的鏡像源,因為測試過程中阿里的鏡像源在apt-get install -y libgdiplus的時候會提示找不到這個組件(坑)。因為使用的有基于System.Drawing繪制的驗證碼圖片,所以需要在構建的時候把libgdiplus組件引用到鏡像文件中,最后把鏡像系統中的時區(qū)改成亞洲的時區(qū)。

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS baseWORKDIR /WhiteListEXPOSE 5000COPY . .RUN touch /etc/apt/sources.listRUN echo "" > /etc/apt/sources.list \    && echo "deb http://mirrors.163.com/debian/ buster main non-free contrib" >> /etc/apt/sources.list \    && echo "deb http://mirrors.163.com/debian/ buster-updates main non-free contrib" >> /etc/apt/sources.list \    && echo "deb http://mirrors.163.com/debian/ buster-backports main non-free contrib" >> /etc/apt/sources.list \    && echo "deb-src http://mirrors.163.com/debian/ buster main non-free contrib" >> /etc/apt/sources.list \    && echo "deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib" >> /etc/apt/sources.list \    && echo "deb-src http://mirrors.163.com/debian/ buster-backports main non-free contrib" >> /etc/apt/sources.list \    && echo "deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib" >> /etc/apt/sources.list \    && echo "deb-src http://mirrors.163.com/debian-security/ buster/updates main non-free contrib" >> /etc/apt/sources.listENV TZ=Asia/ShanghaiRUN apt-get update -y #RUN apt-get upgrade -yRUN apt-get install -y libgdiplusRUN apt-get cleanRUN ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dllRUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \    && echo ${TZ} > /etc/timezoneENV ASPNETCORE_URLS http://+:5000ENTRYPOINT ["dotnet", "WhiteList.dll"]

同時可以添加.dockerignore文件來排除一些不需要打包到鏡像里的文件,比如忽略到bin或者obj目錄里的文件。[b|B]in [O|o]bj最后,千萬不要忘記把wwwroot復制到發(fā)布的目錄中,要不然訪問的時候會沒有樣式。以上Dockerfile中的有些腳本命令可合并成一行。

Docker鏡像打包發(fā)布

把Dockerfile和.dockerignore文件復制到發(fā)布目錄中,然后運行PowShell,cd命令到發(fā)布目錄(本文使用目錄為bin\Release\net6.0\linux-x64)。然后執(zhí)行打包命令docker build --tag whitelist:1.0 .

如一切正常,按上圖的進度執(zhí)行完成后,就可以在Docker Desktop中看到打包的鏡像文件。

Docker Desktop中的Linux系統

我們點擊鏡像的運行按鈕,填寫好鏡像名稱,綁定端口(本機通過此端口用瀏覽器可以訪問到容器內的服務),綁定的本地文件夾(可選)和其它參數(可選)后點擊RUN按鈕,如果沒有端口沖突和名稱沖突,就會得到一個運行成功的容器。我們可以進入到容器的操作系統中查看一下系統信息。

cat /etc/issueDebian GNU/Linux 10

cat /proc/versionLinux version 5.15.90.1-microsoft-standard-WSL2 (oe-user@oe-host) (x86_64-msft-linux-gcc (GCC) 9.3.0, GNU ld (GNU Binutils) 2.34.0.20200220)

Docker鏡像導出

現在我們已經得到了一個基于Docker Desktop在Windows系統上構建的鏡像文件,在使用中,我們需要把這個鏡像運行在Linux系統中(比如CentOS),所以需要把鏡像導出來進行分發(fā)(這里使用的是本地導出,不是導出到云鏡像服務器)。在Windows系統的PowerShell中執(zhí)行下面命令,把鏡像(whitelist):Tag名(1.0)導出到本地的d盤,文件名是whitelist.tar,docker save -o d:\whitelist.tar whitelist:1.0

CentOS安裝Docker

首先安裝一下Docker所依賴的組件yum install -y yum-untils device-mapper-persistent-data lvm2

然后配置數據源為國內的阿里云數據源yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安裝Dockeryum install docker-ce

啟動Dockersystemctl start docker

設置Docker為開機自啟systemctl enable docker

查看Docker的版本信息docker --versionDocker version 24.0.2, build cb74dfc

查看當前Docker中的鏡像docker images這里看到,目前Docker中沒有任何鏡像

CentOS Docker鏡像導入

把鏡像文件上傳到/usr/data目錄下,然后執(zhí)行導入鏡像的命令docker load -i /usr/data/whitelist.tar 導入成功后,再查看Docker中的鏡像,就會看到我們剛導入的鏡像文件了。

隨后我們執(zhí)行運行鏡像的命令,把CentOS系統的8080端口和容器的5000端口做映射。docker run -d -p 8080:5000 --name whitelist whitelist:1.0運行成功后會返回一個類似GUID的容器編號,然后我們可以查看一下當前運行的容器。docker ps如果防火墻沒有放行8080端口,可用以下命令放開8080端口。firewall-cmd --zone=public --add-port=8080/tcp --permanentfirewall-cmd --reload

最后我們本機打開瀏覽器訪問CentOS系統的IP并帶上8080端口,就可看到我們從Windows上打包的Docker鏡像已經成功運行在了CentOS系統的Docker環(huán)境下了。

標簽: