在Windows下使用Docker,我們選擇Docker Desktop這個軟體,非常友善。
Docker Desktop介紹及安裝
Docker Desktop是适用于Mac、Linux或Windows環境的一鍵安裝應用程式,使您能夠建構和共享容器化應用程式和微服務。
它提供了一個簡單的GUI(圖形使用者界面),允許您直接從機器管理容器、應用程式和圖像。Docker Desktop既可以單獨使用,也可以作為CLI的補充工具。
Docker Desktop減少了在複雜設定上花費的時間,是以您可以專注于編寫代碼。它負責端口映射、檔案系統問題和其他預設設定,并定期更新錯誤修複和安全更新。
安裝Docker Desktop後,預設安裝了以下元件:
- Docker Engine
- Docker CLI client
- Docker Buildx
- Extensions
- Docker Compose
- Docker Content Trust
- Kubernetes
- Credential Helper
Docker Desktop可與您選擇的開發工具和語言配合使用,并使您能夠通路Docker Hub中的大量認證圖像和模闆庫。這使開發團隊能夠擴充他們的環境,以便使用安全的存儲庫快速自動建構、持續內建和協作。
官網位址
項目編譯
釋出項目運作架構為.net6.0,運作環境為linux-x64
Dockerfile内容及國内鏡像源
Dockerfile是用來建構docker鏡像的建構檔案,它其實就像一個腳本檔案,裡面可以執行一些指令,通過它就可以指定或下載下傳建構的鏡像所需要的一些元件,然後打包成鏡像檔案。
下面是本教程使用的Dockerfile腳本檔案内容,指定了使用asp.net6.0的運作時環境,并且在鏡像系統的5000端口上提供http服務。同時更新sources.list使用國内鏡像源,這裡沒有用阿裡的鏡像源,因為測試過程中阿裡的鏡像源在apt-get install -y libgdiplus的時候會提示找不到這個元件(坑)。因為使用的有基于System.Drawing繪制的驗證碼圖檔,是以需要在建構的時候把libgdiplus元件引用到鏡像檔案中,最後把鏡像系統中的時區改成亞洲的時區。
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /WhiteList
EXPOSE 5000
COPY . .
RUN touch /etc/apt/sources.list
RUN 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.list
ENV TZ=Asia/Shanghai
RUN apt-get update -y
#RUN apt-get upgrade -y
RUN apt-get install -y libgdiplus
RUN apt-get clean
RUN ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \
&& echo ${TZ} > /etc/timezone
ENV ASPNETCORE_URLS http://+:5000
ENTRYPOINT ["dotnet", "WhiteList.dll"]
同時可以添加.dockerignore檔案來排除一些不需要打包到鏡像裡的檔案,比如忽略到bin或者obj目錄裡的檔案。
[b|B]in [O|o]bj
最後,千萬不要忘記把wwwroot複制到釋出的目錄中,要不然通路的時候會沒有樣式。以上Dockerfile中的有些腳本指令可合并成一行。
Docker鏡像打包釋出
把Dockerfile和.dockerignore檔案複制到釋出目錄中,然後運作PowShell,cd指令到釋出目錄(本文使用目錄為bin\Release\net6.0\linux-x64)。
然後執行打包指令
docker build --tag whitelist:1.0 .
如一切正常,按上圖的進度執行完成後,就可以在Docker Desktop中看到打包的鏡像檔案。
Docker Desktop中的Linux系統
我們點選鏡像的運作按鈕,填寫好鏡像名稱,綁定端口(本機通過此端口用浏覽器可以通路到容器内的服務),綁定的本地檔案夾(可選)和其它參數(可選)後點選RUN按鈕,如果沒有端口沖突和名稱沖突,就會得到一個運作成功的容器。
我們可以進入到容器的作業系統中檢視一下系統資訊。
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)
Docker鏡像導出
現在我們已經得到了一個基于Docker Desktop在Windows系統上建構的鏡像檔案,在使用中,我們需要把這個鏡像運作在Linux系統中(比如CentOS),是以需要把鏡像導出來進行分發(這裡使用的是本地導出,不是導出到雲鏡像伺服器)。
在Windows系統的PowerShell中執行下面指令,把鏡像(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
安裝Docker
yum install docker-ce
啟動Docker
systemctl start docker
設定Docker為開機自啟
systemctl enable docker
檢視Docker的版本資訊
docker --version
Docker version 24.0.2, build cb74dfc
檢視目前Docker中的鏡像
docker images
這裡看到,目前Docker中沒有任何鏡像
CentOS Docker鏡像導入
把鏡像檔案上傳到/usr/data目錄下,然後執行導入鏡像的指令
docker load -i /usr/data/whitelist.tar
導入成功後,再檢視Docker中的鏡像,就會看到我們剛導入的鏡像檔案了。
随後我們執行運作鏡像的指令,把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 --permanent
firewall-cmd --reload
最後我們本機打開浏覽器通路CentOS系統的IP并帶上8080端口,就可看到我們從Windows上打包的Docker鏡像已經成功運作在了CentOS系統的Docker環境下了。