Linux系統Docker 部署 ASP.NET Core應用的流程分析

一、系統環境

1、騰訊雲輕量應用服務器CentOS7.6

二、操作流程及途中遇到的問題

1、SSH方式遠程Linux

ssh <username>@<IP address or domain name>

如果遇到下圖問題:

出現這個問題的原因:known_hosts是記錄遠程主機的公鑰的文件,之前重裝個系統,而保存的公鑰還是未重裝系統的系統公鑰,在ssh鏈接的時候首先會驗證公鑰,如果公鑰不對,那麼就會報錯
解決方法:使用shh-keygen 命令ssh-keygen -R IP,執行完畢出現下圖:

然後重新使用ssh方式遠程Linux:


2、更新系統

sudo yum update

3、安裝Git

sudo yum -y install git

4、安裝Nginx,啟用和啟動服務:

sudo yum install nginx
sudo systemctl enable nginx
sudo systemctl start nginx

5、安裝Dotnet SDK

每臺計算機隻需要執行一次此操作。

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-5.0

6、安裝Docker環境

1)安裝Docker源:

首先,我們可以先執行下卸載命令,如果你之前安裝過,或者系統自帶瞭,需要卸載幹凈:

sudo yum remove docker-ce

然後我們就可以安裝指定的源瞭,有官方版本和阿裡雲版本,我這裡嘗試使用阿裡雲版本的吧,聽說會快一些。
Step 1: 安裝必要的一些系統工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

Step 2: 添加軟件源信息

sudo yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Step 3: 更新並安裝Docker-CE

sudo yum makecache fast (可選)
sudo yum -y install docker-ce

Step 4: 開啟Docker服務

sudo service docker start

設置docker開機啟動

systemctl enable docker

啟動docker

systemctl start docker

查看版本

docker –version

Docker常用命令

查看所有鏡像 docker images
刪除一個imageid的鏡像

docker rmi [imageid]

刪除所有鏡像

sudo docker rmi $(docker images -q)

查看所有容器運行狀態

docker ps -a

刪除一個containerid的容器(實例)

docker rm [containerid]

刪除所有容器

docker rm $(sudo docker ps -a -q)

2)測試Hello World

檢查docker是否可以正常運行(運行hello-world鏡像,如果本機沒有hello-world鏡像,系統會自動拉取hello-world鏡像)

docker run hello-world

這個時候,我們可以來檢查一下:
當前服務器有哪些鏡像:

docker images

那如何查看有哪些容器呢:

docker ps -a

這個就是剛剛我們看到有輸出內容的容器:容器ID是eb180038a3ce,鏡像是hello-world,狀態是已退出。

7、發佈自己的鏡像

1)添加Docker支持:

自定義項目要暴露的接口

在Api層右鍵添加Docker支持,選擇Linux

更改Dockerfile文件

FROM:意思是我們的項目源鏡像是哪個;
WORKDIR:鏡像的工作目錄;
COPY:復制文件(將Dockerfile所在目錄下文件復制到鏡像中的工作目錄中)
EXPOSE:容器要開放的端口(我們用項目的8081端口)
ENTRYPOINT:為容器啟動後要執行的命令 (這裡將執行dotnet Docker.Core.Api.dll命令)

2個腳本文件:Docker.Core.Publish.Linux.sh和Docker.Core.Publish.Docker.sh


Dockerfile:然後右鍵,始終屬性、始終復制到輸出(bin)目錄
接下來把項目發佈到GitHub或者Gitee:我這裡是發佈到github然後去碼雲強制同步項目,從國內clone項目速度更快

2)發佈

我們在服務器用Git將代碼PULL下來,然後執行發佈命令,我用一個批處理文件,直接一鍵生成(主要是防止漏掉文件):

執行發佈命令:

就可以看到生成好的發佈文件夾PublishFiles。
接下來就是docker 編譯鏡像瞭。

3)創建鏡像

進入到我們的發佈文件夾PublishFiles文件夾下,我們測試一下這個文件是否正常:

dotnet Docker.Core.Api.dll

沒問題後,開始build瞭,還是在當前文件夾下(記得那個點):

docker build -t lenceas/apkimg .

其中lenceas/apkimg是我們的鏡像名。
因為我們的Dockerfile是五步,所以這裡也正好是5個Step。
然後查看機器上的鏡像:

這裡多瞭兩個鏡像,一個是我們的鏡像ID為48252cd5c2d0,大小209M的項目文件,一個是我們Dockerfile的源鏡像。

4)推送鏡像到Docker hub倉庫

第一步:在Docker hub註冊賬號
第二步:創建倉庫

第三步:服務器鏡像推送
先登錄賬號(這裡如果以前登錄過,可以先退出再重新登錄)

推送:

docker push lenceas/apkimg:latest

檢查:
我們登錄管理後臺,查看結果

可以看到已經成功推送瞭,這樣的話,我們就可以在任何的地方使用我的鏡像啦。
現在我們有瞭鏡像,那就可以創建容器瞭,因為有瞭容器才能運行。

8、生成並運行容器

1)生成容器

有瞭鏡像,我們來生成一個容器:

docker run -it -p 8081:8081 lenceas/apkimg

會看到輸出內容,如果沒有報錯的話,就恭喜啦,退出當前進程,查看下有哪些容器:

這時候可以看到多瞭一個容器ID為e45b93658007,鏡像是lenceas/apkimg的容器,不過我們的項目容器是退出狀態,需要開啟下:

docker start e45b93658007

狀態已經是運行中瞭,那怎麼測試接口是否正常瞭呢,可以用curl命令:

curl http://localhost:8081/WeatherForecast

如果到瞭這裡,恭喜你,Docker部署NetCore基本已經搞定瞭
剩下最後一步瞭,nginx代理,因為我們的Docker已經守護瞭這個進程,所以我們不需要其他的守護進程的工作。

9、Nginx代理服務

修改nginx.conf文件,兩種方式:
1.vim 命令
編輯文件:vim xxx
插入開始編輯:i
保存並退出::wq!
2.FTP下載到本地修改
這裡具體的配置就不寫瞭,網上可以自己去搜.

接下來就是重啟Nginx服務,首先可以檢測語法錯誤:

nginx -t

nginx -s reload

以上就是Linux Docker 部署 ASP.NET Core應用的詳細內容,更多關於Docker 部署 ASP.NET Core應用的資料請關註WalkonNet其它相關文章!

推薦閱讀: