在Windows下使用Docker,我們選擇Docker Desktop這個軟體,非常方便。
Docker Desktop是適用於Mac、Linux或Windows環境的一鍵安裝應用程式,使您能夠構建和共用容器化應用程式和微服務。
它提供了一個簡單的GUI(圖形化使用者介面),允許您直接從機器管理容器、應用程式和影象。Docker Desktop既可以單獨使用,也可以作為CLI的補充工具。
Docker Desktop減少了在複雜設定上花費的時間,因此您可以專注於編寫程式碼。它負責埠對映、檔案系統問題和其他預設設定,並定期更新錯誤修復和安全更新。
安裝Docker Desktop後,預設安裝了以下元件:
Docker Desktop可與您選擇的開發工具和語言配合使用,並使您能夠存取Docker Hub中的大量認證影象和模板庫。這使開發團隊能夠擴充套件他們的環境,以便使用安全的儲存庫快速自動構建、持續整合和共同作業。
官網地址
釋出專案執行框架為.net6.0,執行環境為linux-x64
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中的有些指令碼命令可合併成一行。
把Dockerfile和.dockerignore檔案複製到釋出目錄中,然後執行PowShell,cd命令到釋出目錄(本文使用目錄為bin\Release\net6.0\linux-x64)。
然後執行打包命令
docker build --tag whitelist:1.0 .
如一切正常,按上圖的進度執行完成後,就可以在Docker Desktop中看到打包的映象檔案。
我們點選映象的執行按鈕,填寫好映象名稱,繫結埠(本機通過此埠用瀏覽器可以存取到容器內的服務),繫結的本地資料夾(可選)和其它引數(可選)後點選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 Desktop在Windows系統上構建的映象檔案,在使用中,我們需要把這個映象執行在Linux系統中(比如CentOS),所以需要把映象匯出來進行分發(這裡使用的是本地匯出,不是匯出到雲映象伺服器)。
在Windows系統的PowerShell中執行下面命令,把映象(whitelist):Tag名(1.0)匯出到原生的D槽,檔名是whitelist.tar,
docker save -o d:\whitelist.tar whitelist:1.0
首先安裝一下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中沒有任何映象
把映象檔案上傳到/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環境下了。