.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 容器對外暴露的端口。


再然後是 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

參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章