在Windows下使用Docker,我們選擇Docker Desktop這個軟件,非常方便。
Docker Desktop介紹及安裝Docker Desktop是適用于Mac、Linux或Windows環(huán)境的一鍵安裝應(yīng)用程序,使您能夠構(gòu)建和共享容器化應(yīng)用程序和微服務(wù)。它提供了一個簡單的GUI(圖形用戶界面),允許您直接從機(jī)器管理容器、應(yīng)用程序和圖像。Docker Desktop既可以單獨使用,也可以作為CLI的補(bǔ)充工具。Docker Desktop減少了在復(fù)雜設(shè)置上花費的時間,因此您可以專注于編寫代碼。它負(fù)責(zé)端口映射、文件系統(tǒng)問題和其他默認(rèn)設(shè)置,并定期更新錯誤修復(fù)和安全更新。安裝Docker Desktop后,默認(rèn)安裝了以下組件:
(資料圖片)
Docker EngineDocker CLI clientDocker BuildxExtensionsDocker ComposeDocker Content TrustKubernetesCredential HelperDocker Desktop可與您選擇的開發(fā)工具和語言配合使用,并使您能夠訪問Docker Hub中的大量認(rèn)證圖像和模板庫。這使開發(fā)團(tuán)隊能夠擴(kuò)展他們的環(huán)境,以便使用安全的存儲庫快速自動構(gòu)建、持續(xù)集成和協(xié)作。官網(wǎng)地址
項目編譯發(fā)布項目運行框架為.net6.0,運行環(huán)境為linux-x64
Dockerfile內(nèi)容及國內(nèi)鏡像源Dockerfile是用來構(gòu)建docker鏡像的構(gòu)建文件,它其實就像一個腳本文件,里面可以執(zhí)行一些命令,通過它就可以指定或下載構(gòu)建的鏡像所需要的一些組件,然后打包成鏡像文件。下面是本教程使用的Dockerfile腳本文件內(nèi)容,指定了使用asp.net6.0的運行時環(huán)境,并且在鏡像系統(tǒng)的5000端口上提供http服務(wù)。同時更新sources.list使用國內(nèi)鏡像源,這里沒有用阿里的鏡像源,因為測試過程中阿里的鏡像源在apt-get install -y libgdiplus的時候會提示找不到這個組件(坑)。因為使用的有基于System.Drawing繪制的驗證碼圖片,所以需要在構(gòu)建的時候把libgdiplus組件引用到鏡像文件中,最后把鏡像系統(tǒng)中的時區(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ù)制到發(fā)布的目錄中,要不然訪問的時候會沒有樣式。以上Dockerfile中的有些腳本命令可合并成一行。
把Dockerfile和.dockerignore文件復(fù)制到發(fā)布目錄中,然后運行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)我們點擊鏡像的運行按鈕,填寫好鏡像名稱,綁定端口(本機(jī)通過此端口用瀏覽器可以訪問到容器內(nèi)的服務(wù)),綁定的本地文件夾(可選)和其它參數(shù)(可選)后點擊RUN按鈕,如果沒有端口沖突和名稱沖突,就會得到一個運行成功的容器。我們可以進(jìn)入到容器的操作系統(tǒng)中查看一下系統(tǒng)信息。
cat /etc/issue
Debian GNU/Linux 10
cat /proc/version
Linux 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)
現(xiàn)在我們已經(jīng)得到了一個基于Docker Desktop在Windows系統(tǒng)上構(gòu)建的鏡像文件,在使用中,我們需要把這個鏡像運行在Linux系統(tǒng)中(比如CentOS),所以需要把鏡像導(dǎo)出來進(jìn)行分發(fā)(這里使用的是本地導(dǎo)出,不是導(dǎo)出到云鏡像服務(wù)器)。在Windows系統(tǒng)的PowerShell中執(zhí)行下面命令,把鏡像(whitelist):Tag名(1.0)導(dǎo)出到本地的d盤,文件名是whitelist.tar,docker save -o d:\whitelist.tar whitelist:1.0
首先安裝一下Docker所依賴的組件yum install -y yum-untils device-mapper-persistent-data lvm2
然后配置數(shù)據(jù)源為國內(nèi)的阿里云數(shù)據(jù)源yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安裝Dockeryum install docker-ce
啟動Dockersystemctl start docker
設(shè)置Docker為開機(jī)自啟systemctl enable docker
查看Docker的版本信息docker --version
Docker version 24.0.2, build cb74dfc
查看當(dāng)前Docker中的鏡像docker images
這里看到,目前Docker中沒有任何鏡像
把鏡像文件上傳到/usr/data目錄下,然后執(zhí)行導(dǎo)入鏡像的命令docker load -i /usr/data/whitelist.tar
導(dǎo)入成功后,再查看Docker中的鏡像,就會看到我們剛導(dǎo)入的鏡像文件了。
隨后我們執(zhí)行運行鏡像的命令,把CentOS系統(tǒng)的8080端口和容器的5000端口做映射。docker run -d -p 8080:5000 --name whitelist whitelist:1.0
運行成功后會返回一個類似GUID的容器編號,然后我們可以查看一下當(dāng)前運行的容器。docker ps
如果防火墻沒有放行8080端口,可用以下命令放開8080端口。firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
最后我們本機(jī)打開瀏覽器訪問CentOS系統(tǒng)的IP并帶上8080端口,就可看到我們從Windows上打包的Docker鏡像已經(jīng)成功運行在了CentOS系統(tǒng)的Docker環(huán)境下了。
標(biāo)簽: