目錄
- 一、系統(tǒng)環(huán)境
- 二、操作流程及途中遇到的問題
一、系統(tǒng)環(huán)境
1、騰訊云輕量應(yīng)用服務(wù)器CentOS7.6
二、操作流程及途中遇到的問題
1、SSH方式遠(yuǎn)程Linux
ssh <username>@<IP address or domain name>
如果遇到下圖問題:
![](/d/20211016/a1c47ed2f0696a6b8346ee1435de9a15.gif)
出現(xiàn)這個問題的原因:known_hosts是記錄遠(yuǎn)程主機的公鑰的文件,之前重裝個系統(tǒng),而保存的公鑰還是未重裝系統(tǒng)的系統(tǒng)公鑰,在ssh鏈接的時候首先會驗證公鑰,如果公鑰不對,那么就會報錯
解決方法:使用shh-keygen 命令ssh-keygen -R IP
,執(zhí)行完畢出現(xiàn)下圖:
![](/d/20211016/cdb3f2c0fdff363e3c2a003af7801f86.gif)
然后重新使用ssh方式遠(yuǎn)程Linux:
![](/d/20211016/353fbe7d3d5a7ad40fb97415e64a8f82.gif)
![](/d/20211016/f426637754575cc2d8f64fcc85799158.gif)
2、更新系統(tǒng)
sudo yum update
3、安裝Git
sudo yum -y install git
4、安裝Nginx,啟用和啟動服務(wù):
sudo yum install nginx
sudo systemctl enable nginx
sudo systemctl start nginx
5、安裝Dotnet SDK
每臺計算機只需要執(zhí)行一次此操作。
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-5.0
6、安裝Docker環(huán)境
1)安裝Docker源:
首先,我們可以先執(zhí)行下卸載命令,如果你之前安裝過,或者系統(tǒng)自帶了,需要卸載干凈:
sudo yum remove docker-ce
然后我們就可以安裝指定的源了,有官方版本和阿里云版本,我這里嘗試使用阿里云版本的吧,聽說會快一些。
Step 1: 安裝必要的一些系統(tǒng)工具
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服務(wù)
sudo service docker start
設(shè)置docker開機啟動
systemctl enable docker
啟動docker
systemctl start docker
查看版本
docker --version
Docker常用命令
查看所有鏡像 docker images
刪除一個imageid的鏡像
docker rmi [imageid]
刪除所有鏡像
sudo docker rmi $(docker images -q)
查看所有容器運行狀態(tài)
docker ps -a
刪除一個containerid的容器(實例)
docker rm [containerid]
刪除所有容器
docker rm $(sudo docker ps -a -q)
2)測試Hello World
檢查docker是否可以正常運行(運行hello-world鏡像,如果本機沒有hello-world鏡像,系統(tǒng)會自動拉取hello-world鏡像)
docker run hello-world
這個時候,我們可以來檢查一下:
當(dāng)前服務(wù)器有哪些鏡像:
docker images
那如何查看有哪些容器呢:
docker ps -a
這個就是剛剛我們看到有輸出內(nèi)容的容器:容器ID是eb180038a3ce,鏡像是hello-world,狀態(tài)是已退出。
![](/d/20211016/f1242aa94c60d2277a2cfac84cc37987.gif)
7、發(fā)布自己的鏡像
1)添加Docker支持:
自定義項目要暴露的接口
![](/d/20211016/efde2fb475eeeb7a1f72f0bc615a8b4f.gif)
在Api層右鍵添加Docker支持,選擇Linux
![](/d/20211016/366a399e1acf1db586617906228cfc89.gif)
更改Dockerfile文件
![](/d/20211016/906ea29ce9b7ca1b7110fc14fdde9ab4.gif)
FROM:意思是我們的項目源鏡像是哪個;
WORKDIR:鏡像的工作目錄;
COPY:復(fù)制文件(將Dockerfile所在目錄下文件復(fù)制到鏡像中的工作目錄中)
EXPOSE:容器要開放的端口(我們用項目的8081端口)
ENTRYPOINT:為容器啟動后要執(zhí)行的命令 (這里將執(zhí)行dotnet Docker.Core.Api.dll命令)
2個腳本文件:Docker.Core.Publish.Linux.sh和Docker.Core.Publish.Docker.sh
![](/d/20211016/393d5efda0b1490771d254e24422581c.gif)
![](/d/20211016/7f8e801d8b30261fce302e6fefba67a0.gif)
Dockerfile:然后右鍵,始終屬性、始終復(fù)制到輸出(bin)目錄
接下來把項目發(fā)布到GitHub或者Gitee:我這里是發(fā)布到github然后去碼云強制同步項目,從國內(nèi)clone項目速度更快
2)發(fā)布
我們在服務(wù)器用Git將代碼PULL下來,然后執(zhí)行發(fā)布命令,我用一個批處理文件,直接一鍵生成(主要是防止漏掉文件):
![](/d/20211016/4da229e50e7471e95106b1168f6d538d.gif)
執(zhí)行發(fā)布命令:
![](/d/20211016/1ecc824029185d0b1cd36041abc5a68a.gif)
就可以看到生成好的發(fā)布文件夾PublishFiles。
接下來就是docker 編譯鏡像了。
3)創(chuàng)建鏡像
進(jìn)入到我們的發(fā)布文件夾PublishFiles文件夾下,我們測試一下這個文件是否正常:
dotnet Docker.Core.Api.dll
![](/d/20211016/b10cddca202641d3825d25c2cbfff880.gif)
沒問題后,開始build了,還是在當(dāng)前文件夾下(記得那個點):
docker build -t lenceas/apkimg .
![](/d/20211016/7ece5092fd311be05856fffa069e80d1.gif)
其中l(wèi)enceas/apkimg是我們的鏡像名。
因為我們的Dockerfile是五步,所以這里也正好是5個Step。
然后查看機器上的鏡像:
![](/d/20211016/ee8100fc8339b158d1f0258df62b601e.gif)
這里多了兩個鏡像,一個是我們的鏡像ID為48252cd5c2d0,大小209M的項目文件,一個是我們Dockerfile的源鏡像。
4)推送鏡像到Docker hub倉庫
第一步:在Docker hub注冊賬號
第二步:創(chuàng)建倉庫
![](/d/20211016/c34d954e4b992966b1239bf658c5eaf9.gif)
第三步:服務(wù)器鏡像推送
先登錄賬號(這里如果以前登錄過,可以先退出再重新登錄)
![](/d/20211016/52e212d0a238914bbdf91998a0efd4dc.gif)
推送:
docker push lenceas/apkimg:latest
![](/d/20211016/f44bc1f0f7368f11bc64e82b1ebbcd0d.gif)
檢查:
我們登錄管理后臺,查看結(jié)果
![](/d/20211016/ce4866c3e3fcfd4ac7a1a84811cd829f.gif)
可以看到已經(jīng)成功推送了,這樣的話,我們就可以在任何的地方使用我的鏡像啦。
現(xiàn)在我們有了鏡像,那就可以創(chuàng)建容器了,因為有了容器才能運行。
8、生成并運行容器
1)生成容器
有了鏡像,我們來生成一個容器:
docker run -it -p 8081:8081 lenceas/apkimg
![](/d/20211016/dba23f744905f6149f816c24ee22a5fa.gif)
會看到輸出內(nèi)容,如果沒有報錯的話,就恭喜啦,退出當(dāng)前進(jìn)程,查看下有哪些容器:
![](/d/20211016/7c7a490ae513e442eb5fa223ef5217ca.gif)
這時候可以看到多了一個容器ID為e45b93658007,鏡像是lenceas/apkimg的容器,不過我們的項目容器是退出狀態(tài),需要開啟下:
docker start e45b93658007
![](/d/20211016/244616e3ada9eb5d40124111e2b5baef.gif)
狀態(tài)已經(jīng)是運行中了,那怎么測試接口是否正常了呢,可以用curl命令:
curl http://localhost:8081/WeatherForecast
![](/d/20211016/f6dd19c33eda6f448b39afbabcca852d.gif)
如果到了這里,恭喜你,Docker部署NetCore基本已經(jīng)搞定了
剩下最后一步了,nginx代理,因為我們的Docker已經(jīng)守護了這個進(jìn)程,所以我們不需要其他的守護進(jìn)程的工作。
9、Nginx代理服務(wù)
修改nginx.conf文件,兩種方式:
1.vim 命令
編輯文件:vim xxx
插入開始編輯:i
保存并退出::wq!
2.FTP下載到本地修改
這里具體的配置就不寫了,網(wǎng)上可以自己去搜.
接下來就是重啟Nginx服務(wù),首先可以檢測語法錯誤:
nginx -t
![](/d/20211016/c1ca66ecfc80f684ad0000b4a042d774.gif)
nginx -s reload
![](/d/20211016/ee2b947ccec2e1ccd009d5d42c921349.gif)
以上就是Linux Docker 部署 ASP.NET Core應(yīng)用的詳細(xì)內(nèi)容,更多關(guān)于Docker 部署 ASP.NET Core應(yīng)用的資料請關(guān)注腳本之家其它相關(guān)文章!