.NET Core 如何部署到Docker(菜鳥篇)


我的.net core 版本為3.1,centos 版本為7.0

在Centos下安裝Docker

這里參考此篇文章:Docker從入門到實踐-在centos下安裝Docker
如果下載慢就更換yum的軟件源:
配置文件路徑為: /etc/yum.repos.d/docker-ce.repo


安裝完成后進行測試:docker run hello-world
輸出如圖所示的內容就表示安裝成功:
微信截圖_20201203134759.png

.NET Core 配置

這里的重點是需要一個 Dockerfile 文件,無需后綴文件名。
這個文件可以通過在創建項目的時候勾選 啟用Docker支持 的選項生成,也可以自己在項目的根目錄中新建一個,如圖所示:
微信截圖_20201203135034.png
如何寫一個 Dockerfile 文件是本次文章內容重點。

Dockerfile格式

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1

#FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
EXPOSE 80
EXPOSE 443

RUN apt-get update -y && apt-get install -y libgdiplus && apt-get clean && ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll

RUN cd /usr/local/src

RUN mkdir DockerAsPose

WORKDIR /usr/local/src/DockerAsPose

COPY . .

ENTRYPOINT ["dotnet", "PPTDemo.dll"]

第一條 FROM 指令是拉取一個基礎鏡像,這里可以使用微軟提供的官方鏡像。據說還有一個體積更小的。這條命令必須放在第一行
然后是 EXPOSE 指令,這是告訴Docker 容器對外暴露的端口。

EXPOSE指令是聲明運行時容器提供服務端口,這只是一個聲明,在運行時並不會因為這個聲明應用就會開啟這個端口的服務


再然后是 RUN 指令,這里可以執行你想要執行的命令,比如安裝某個依賴庫。(我這里安裝的是 libgdiplus,是圖形處理方面的。
直到 COPY 指令前都是在指定地方創建一個目錄,COPY . . 是將當前所有文件復制到你創建的工作目錄中。


最后就是 ENTRYPOINT 指令 就是告訴程序的入口點是哪個。這里的 PPTDemo.dll就是你程序發布后生成的dll文件。

最終發布

在發布以前,你可以像以前一樣通過文件夾的形式發布項目,最后會得到一堆dll文件以及你的 web.configDockerfile等文件。微信截圖_20201203141501.png


這個時候你需要把你的發布文件夾內的所有內容上傳到服務器的相關目錄,可以通過 xftp 的方式上傳。

上傳完以后就是剩下最后一步,將程序部署到
Docker**中,這里我們需要以下2個命令來完成這部分操作:

#1.以下命令是構建一個鏡像,鏡像名稱可以為XX.XXX.XX的格式,最后一定要以"."結尾
docker build -t test.iamge.docker .
#2.以下命令是讓鏡像在一個指定容器中運行,前面是容器名稱,后面是鏡像名稱,-p 是指定容器的運行端口
docker run --name=testdockercontainer -p 5000:80 -d  test.iamge.docker

運行完以后就可以通過 curl 命令查看你的程序了。curl http://localhost:5000
如果以后每次需要更新程序的話,需要重新執行以下命令:

  1. 停止容器
  2. 刪除容器
  3. 刪除鏡像
  4. 構建鏡像
  5. 在指定容器中運行鏡像


為了減少麻煩,以上命令可以放到一個可執行文件中,以后每次就執行這個文件。
build.sh

#!/bin/bash
cd ./my-publish
docker stop mycontainer
docker rm mycontainer
docker rmi my.api:v1
docker build -t my.api:v1 .
docker run --name=mycontainer -p 5000:80 -d  my.api:v1

相關命令

docker ps 列出所有正在運行的容器
docker stop 容器名稱或ID 停止某個容器
docker ps -a 列出所有容器(包括已停止的容器)
docker images 列出所有鏡像
docker rm 容器名稱或ID 刪除某個容器
docker rmi 鏡像名稱或ID 刪除某個鏡像
firewall-cmd --zone=public --add-port=5899/tcp --permanent 打開防火牆的指定端口
firewall-cmd --query-port=80/tcp 查詢防火牆指定端口是否打開
:set ff vim 打開后查看文件的格式
:set ff=unix vim打開文件后,設置文件格式為unix

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM