您的位置:首頁(yè) >生活 >

.NETCore項(xiàng)目在Windows下構(gòu)建Docker鏡像并本地導(dǎo)出分發(fā)到CentOS系統(tǒng)下_環(huán)球新消息

2023-06-26 18:16:58 來(lái)源:博客園

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

Docker Desktop介紹及安裝

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


(資料圖片)

Docker EngineDocker CLI clientDocker BuildxExtensionsDocker ComposeDocker Content TrustKubernetesCredential Helper

Docker Desktop可與您選擇的開(kāi)發(fā)工具和語(yǔ)言配合使用,并使您能夠訪問(wèn)Docker Hub中的大量認(rèn)證圖像和模板庫(kù)。這使開(kāi)發(fā)團(tuán)隊(duì)能夠擴(kuò)展他們的環(huán)境,以便使用安全的存儲(chǔ)庫(kù)快速自動(dòng)構(gòu)建、持續(xù)集成和協(xié)作。官網(wǎng)地址

項(xiàng)目編譯

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

Dockerfile內(nèi)容及國(guó)內(nèi)鏡像源

Dockerfile是用來(lái)構(gòu)建docker鏡像的構(gòu)建文件,它其實(shí)就像一個(gè)腳本文件,里面可以執(zhí)行一些命令,通過(guò)它就可以指定或下載構(gòu)建的鏡像所需要的一些組件,然后打包成鏡像文件。下面是本教程使用的Dockerfile腳本文件內(nèi)容,指定了使用asp.net6.0的運(yùn)行時(shí)環(huán)境,并且在鏡像系統(tǒng)的5000端口上提供http服務(wù)。同時(shí)更新sources.list使用國(guó)內(nèi)鏡像源,這里沒(méi)有用阿里的鏡像源,因?yàn)闇y(cè)試過(guò)程中阿里的鏡像源在apt-get install -y libgdiplus的時(shí)候會(huì)提示找不到這個(gè)組件(坑)。因?yàn)槭褂玫挠谢赟ystem.Drawing繪制的驗(yàn)證碼圖片,所以需要在構(gòu)建的時(shí)候把libgdiplus組件引用到鏡像文件中,最后把鏡像系統(tǒng)中的時(shí)區(qū)改成亞洲的時(shí)區(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"]

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

Docker鏡像打包發(fā)布

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

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

Docker Desktop中的Linux系統(tǒng)

我們點(diǎn)擊鏡像的運(yùn)行按鈕,填寫(xiě)好鏡像名稱,綁定端口(本機(jī)通過(guò)此端口用瀏覽器可以訪問(wèn)到容器內(nèi)的服務(wù)),綁定的本地文件夾(可選)和其它參數(shù)(可選)后點(diǎn)擊RUN按鈕,如果沒(méi)有端口沖突和名稱沖突,就會(huì)得到一個(gè)運(yùn)行成功的容器。我們可以進(jìn)入到容器的操作系統(tǒng)中查看一下系統(tǒng)信息。

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鏡像導(dǎo)出

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

CentOS安裝Docker

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

然后配置數(shù)據(jù)源為國(guó)內(nèi)的阿里云數(shù)據(jù)源yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安裝Dockeryum install docker-ce

啟動(dòng)Dockersystemctl start docker

設(shè)置Docker為開(kāi)機(jī)自啟systemctl enable docker

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

查看當(dāng)前Docker中的鏡像docker images這里看到,目前Docker中沒(méi)有任何鏡像

CentOS Docker鏡像導(dǎo)入

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

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

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

標(biāo)簽:

相關(guān)文章

編輯推薦