柚子快報(bào)邀請(qǐng)碼778899分享:容器 運(yùn)維 docker的使用
柚子快報(bào)邀請(qǐng)碼778899分享:容器 運(yùn)維 docker的使用
學(xué)習(xí)目標(biāo):
最近生產(chǎn)新部老平臺(tái)需要新增一臺(tái)測(cè)試機(jī),只有一臺(tái),且是臨時(shí)使用,因此打算使用docker來(lái)部署,記錄一下docker的使用。
學(xué)習(xí)過程:
1. docker的架構(gòu)及原理
Docker客戶端(Client):用戶與Docker進(jìn)行交互的命令行工具,可以通過命令行或者API來(lái)與Docker守護(hù)進(jìn)程通信。Docker守護(hù)進(jìn)程(Daemon):運(yùn)行在主機(jī)上的后臺(tái)服務(wù),負(fù)責(zé)管理鏡像、容器、網(wǎng)絡(luò)和數(shù)據(jù)卷等。Docker鏡像(Image):包含應(yīng)用程序運(yùn)行所需的文件系統(tǒng)和運(yùn)行時(shí)配置,類似于模板。Docker容器(Container):基于鏡像創(chuàng)建的可運(yùn)行實(shí)例,包含了應(yīng)用程序及其依賴的所有內(nèi)容。鏡像和容器的關(guān)系就像類和實(shí)例化對(duì)象的關(guān)系。Docker倉(cāng)庫(kù)(Registry):用于存儲(chǔ)Docker鏡像的集中存儲(chǔ)庫(kù),可以是公共的如Docker Hub,也可以是私有的。
? ? ? ?用戶通過客戶端發(fā)送命令給Docker守護(hù)進(jìn)程,守護(hù)進(jìn)程接收到命令后,會(huì)根據(jù)命令執(zhí)行相應(yīng)的操作,如創(chuàng)建、啟動(dòng)、停止、刪除容器等。
????????當(dāng)用戶要運(yùn)行一個(gè)容器時(shí),Docker守護(hù)進(jìn)程會(huì)先檢查本地是否存在對(duì)應(yīng)的鏡像,如果沒有則從倉(cāng)庫(kù)中下載。Docker利用Linux內(nèi)核的cgroups和namespace等特性,實(shí)現(xiàn)容器的隔離和資源控制,使得容器之間相互獨(dú)立,類似于輕量級(jí)的虛擬化。docker容器運(yùn)行在宿主機(jī)的進(jìn)程中,共享宿主機(jī)的操作系統(tǒng)內(nèi)核,因此比傳統(tǒng)虛擬化更加輕量級(jí)和高效。
?2. 實(shí)際應(yīng)用
1. 在本地建立倉(cāng)庫(kù):
// 在本地主機(jī)上啟動(dòng)一個(gè) Docker Registry 容器,并將其映射到本地的 5000 端口
docker run -d -p 5000:5000 --name registry registry:2?
?2. 然后在項(xiàng)目中編寫Dockerfile。
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS base
RUN echo "Asia/Shanghai" > /etc/timezone && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@/g /etc/apt/sources.list && \
apt update && \
apt install -y curl && \
apt clean && \
rm -rf /var/lib/apt/lists/*
HEALTHCHECK --interval=1m --retries=3 --timeout=20s CMD \
curl -f -s http://127.0.0.1:8080/api/Healthy/Test
WORKDIR /app
EXPOSE 8080
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS base
WORKDIR /app
COPY BenanUtilities.Jiabao.TestTool.TestServer.csproj BenanUtilities.Jiabao.TestTool.TestServer/
RUN dotnet restore
COPY . .
RUN dotnet build
FROM build AS publish
RUN cd BenanUtilities.Jiabao.TestTool.TestServer && dotnet publish -c Release -o ./publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/BenanUtilities.Jiabao.TestTool.TestServer/publish .
ENTRYPOINT ["dotnet", "test-server.dll"]
?3. 寫執(zhí)行腳本
#!/usr/bin/env bash
company=benan
appName='jiabao-test-tool-server'
repository_vpc=localhost:5000
version=$(cat version.txt)
echo "Version = $version"
cat << EOF >> docker-run-jiabaotest-server.sh
#!/usr/bin/env bash
version=$(cat version.txt)
echo "Version = $version"
repository_vpc=localhost:5000
image=repository_vpc/benan/jiabao-test-tool-server:$version
docker run -d --restart always \\
-p 86:8080 \\
-e "ASPNETCORE_ENVIRONMENT=Production" \\
-e "VERSION=$version" \\
\$image
EOF
srcImage=${company}/${appName}:${version}
destImage_vpc=${repository_vpc}/${srcImage}
rm -rf publish
dotnet publish -c Release -o ./publish
cd publish
sudo docker build -t "${srcImage}" .
sudo docker tag "${srcImage}" "${destImage_vpc}"
sudo docker push "${destImage_vpc}"
?經(jīng)歷了各種問題(請(qǐng)參考文章:“docker打包鏡像bug記錄”)之后終于鏡像做好了,
?未完待續(xù)。
柚子快報(bào)邀請(qǐng)碼778899分享:容器 運(yùn)維 docker的使用
參考鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。