Linux Docker 部署 ASP.NET Core應用

Lenceas發表於2021-06-04

一、系統環境

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


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

1、SSH方式遠端Linux

ssh <username>@<IP address or domain name>
如果遇到下圖問題:
image
出現這個問題的原因:known_hosts是記錄遠端主機的公鑰的檔案,之前重灌個系統,而儲存的公鑰還是未重灌系統的系統公鑰,在ssh連結的時候首先會驗證公鑰,如果公鑰不對,那麼就會報錯
解決方法:使用shh-keygen 命令ssh-keygen -R IP,執行完畢出現下圖:
image
然後重新使用ssh方式遠端Linux:
image
image


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,狀態是已退出。
image


7、釋出自己的映象

1)新增Docker支援:

自定義專案要暴露的介面
image
在Api層右鍵新增Docker支援,選擇Linux
image
更改Dockerfile檔案
image
FROM:意思是我們的專案源映象是哪個;
WORKDIR:映象的工作目錄;
COPY:複製檔案(將Dockerfile所在目錄下檔案複製到映象中的工作目錄中)
EXPOSE:容器要開放的埠(我們用專案的8081埠)
ENTRYPOINT:為容器啟動後要執行的命令 (這裡將執行dotnet Docker.Core.Api.dll命令)

2個指令碼檔案:Docker.Core.Publish.Linux.sh和Docker.Core.Publish.Docker.sh
image
image

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


2)釋出

我們在伺服器用Git將程式碼PULL下來,然後執行釋出命令,我用一個批處理檔案,直接一鍵生成(主要是防止漏掉檔案):
image
執行釋出命令:
image
就可以看到生成好的釋出資料夾PublishFiles。
接下來就是docker 編譯映象了。


3)建立映象

進入到我們的釋出資料夾PublishFiles資料夾下,我們測試一下這個檔案是否正常:
dotnet Docker.Core.Api.dll
image
沒問題後,開始build了,還是在當前資料夾下(記得那個點):
docker build -t lenceas/apkimg .
image
其中lenceas/apkimg是我們的映象名。
因為我們的Dockerfile是五步,所以這裡也正好是5個Step。
然後檢視機器上的映象:
image
這裡多了兩個映象,一個是我們的映象ID為48252cd5c2d0,大小209M的專案檔案,一個是我們Dockerfile的源映象。


4)推送映象到Docker hub倉庫

第一步:在Docker hub註冊賬號
第二步:建立倉庫
image
第三步:伺服器映象推送
先登入賬號(這裡如果以前登入過,可以先退出再重新登入)
image
推送:
docker push lenceas/apkimg:latest
image
檢查:
我們登入管理後臺,檢視結果
image
可以看到已經成功推送了,這樣的話,我們就可以在任何的地方使用我的映象啦。
現在我們有了映象,那就可以建立容器了,因為有了容器才能執行。


8、生成並執行容器

1)生成容器

有了映象,我們來生成一個容器:
docker run -it -p 8081:8081 lenceas/apkimg
image
會看到輸出內容,如果沒有報錯的話,就恭喜啦,退出當前程式,檢視下有哪些容器:
image
這時候可以看到多了一個容器ID為e45b93658007,映象是lenceas/apkimg的容器,不過我們的專案容器是退出狀態,需要開啟下:
docker start e45b93658007
image
狀態已經是執行中了,那怎麼測試介面是否正常了呢,可以用curl命令:
curl http://localhost:8081/WeatherForecast
image
如果到了這裡,恭喜你,Docker部署NetCore基本已經搞定了
剩下最後一步了,nginx代理,因為我們的Docker已經守護了這個程式,所以我們不需要其他的守護程式的工作。


9、Nginx代理服務

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

接下來就是重啟Nginx服務,首先可以檢測語法錯誤:
nginx -t
image
nginx -s reload
image

相關文章