日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

[跨平台系列三Docker篇]:ASP.NET Core应用

發布時間:2023/12/4 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [跨平台系列三Docker篇]:ASP.NET Core应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果你是老張的忠實讀者的話,如果是從博客園就開始看我的文章的話,如果后期也一直看我公眾號的話,應該就知道其實我一直在根據一條無形的教學線路來講解的,,如果你真的是想好好學的話,請好好看看我之前的文章吧。

從題目我們可以看的出,今天是五部曲的第三部,你可能會好奇,為啥沒有見到前兩部呢?這里我簡單說下:

1、跨平臺第一部曲:MySql

如果你看我的所有開源項目,應該能發現我已經全部遷移到了Mysql數據庫了,這里不是說SqlServer就不是不跨平臺了,只是MySql用著可能更好些,當然,如果你是買的單獨數據庫服務器,比如阿里云的RDS數據庫,Azure DataBase數據庫的話,那就完全另說了。

當然,不僅僅遷移過去就行了,這只是一個開頭,后期還是有很多東西,需要自己好好研究,比如緩存,數據一致性,索引,存儲,鎖,隊列等等知識,只有用到了才會打開進一步專研的大門。

2、跨平臺第二部曲:Linux

既然要跨平臺,那多平臺的學習就是基礎中的基礎,重中之重了,相信每個人windows服務器已經玩兒到飛起了,所以Linux的學習和研究就很有必要。

我之前有篇文章已經對我的所有項目做了遷移,還是比較詳細的:

《[最全操作指南] 在線六個項目全部遷移Linux》

還是那句話,只有用了,才會去研究,螃蟹這東西,如果沒吃過,永遠不會知道是酸的還是甜的。因為這個Linux遷移基礎的比較簡單,或者說是一個長期學習的東西,所以一篇文章就搞定了。

3、剩下三部曲

從今天開始呢,我打算用三篇講解下Docker相關內容,打算把我六個在線項目都遷移到Docker上,等我完全搞懂了,就開始錄視頻說說,雖然我一直認為官網是最好的老師,因為今天不會講Docker的基本知識,所以到時候我會在視頻教程里詳細說

說完Docker,就說一說CI/CD相關的內容,應該就是基于Docker+Jenkins的吧。

最后一部曲就是K8S一把梭了。

(PS:我的講解速度,取決于各位的素質三連的速度了????)


好啦,今天就說說Docker在netCore中的從入門到部署吧!

1、服務器與工具準備

首先我們需要一個服務器,以后我都是用的Linux了,所以還是果斷的買了一個CentOS系統的服務器,相關配置:

本次所用到的工具主要有:

1、git:提供源代碼管理;

2、docker:容器服務;

3、dotnetcore:SDK環境;

4、nginx:服務器代理;

購買然后登錄上服務器,我們開始一一安裝。

2、安裝輔助工具

1、更新系統 [可選]

新買的系統,我們可以更新一下,畢竟有些包或者依賴最新的還是更好的,不過也不是必須的。

sudo yum update

預計310M,預計10~20分鐘

2、安裝Git [可選]

我們如果要構建鏡像的話,肯定需要發布好的問題+Dockerfile,那發布有三種方式:
第一種就是本地發布,拷貝到服務器,build 鏡像;

第二種是本地發布,然后本地build,推到倉庫里,服務器拉取;

第三種就是服務器PULL代碼,然后服務器發布,再build;

我習慣了第三種,所以我這里安裝Git了。

sudo yum -y install git

預計5m,1~5分鐘

3、安裝Nginx [必要]

我們創建好的容器run后,Docker會自己守護這個進程,但是還是需要一個服務器來做代理和反向代理,一般常用的就是Nginx了:

sudo?yum?install?nginx?

預計14m,1~5分鐘

啟用和啟動服務:

sudo?systemctl?enable?nginx sudo?systemctl?start?nginx

4、安裝Dotnet SDK?[核心]

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

sudo?rpm?-Uvh?https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

sudo yum install dotnet-sdk-3.1

預計119M,20~30分鐘,這個時間比較長,所以你可以考慮在本地發布好,ftp到服務器,當然如果創建了sdk,以后就省事兒了,反正各有利弊。

安裝成功,測試一下版本:

dotnet --list-sdks


完成!

到了這里,我們輔助工具已經安裝完成了,接下來,重頭戲就來了——Docker安裝。

3、安裝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

安裝預計 5 分鐘

設置docker開機啟動

systemctl?enable?docker

啟動docker

systemctl?start?docker

查看版本

docker --version

2、測試Hello World

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

docker run hello-world

如果本地沒有改鏡像,會自動從遠程倉庫拉取,然后再生成容器。

這個時候,我們可以來檢查一下:

當前服務器有哪些鏡像:

docker images

可以看到,這個就是剛剛我們拉取的鏡像:名稱是hello-world,ID是bf756fb1ae65,大小13.3k的鏡像。

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

docker ps -a

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

PS:這里的鏡像就像我們定義了一個hello的Class類, 容器呢,就是這個class類生成的對象,當然可以創建很多個。

這個時候,我們的環境已經已經搞好了,接下來就是重中之重,將我們的項目發布鏡像文件了。

4、發布自己的鏡像

1、添加Docker支持

這個操作是很簡單的,我們打開Blog.Core項目,選擇Web層,然后添加Docker支持:

會生成一個Dockerfile的文件,默認的信息比較多,目前我就來個最簡單的精簡版:

FROM swr.cn-south-1.myhuaweicloud.com/mcr/aspnet:3.1-alpine WORKDIR?/app COPY?.?.? EXPOSE?8081? ENTRYPOINT ["dotnet", "Blog.Core.dll","-b","0.0.0.0"]

簡介一下:

FROM:意思是我們的項目源鏡像是哪個;

WORKDIR:鏡像的工作目錄;

COPY:復制文件(將Dockerfile所在目錄下文件復制到鏡像中的工作目錄中)
EXPOSE:容器要開放的端口(我們用.NETCORE的8081端口)
ENTRYPOINT:為容器啟動后要執行的命令 (這里將執行dotnet Blog.Core.dll命令)

然后右鍵,始終屬性、始終復制到輸出(bin)目錄:

接下來就是上次到Github了。

2、發布

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

執行發布命令:

就可以看到生成好的發布文件夾.PublishFiles。

接下來就是docker 編譯鏡像了。

3、創建鏡像

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

dotnet?Blog.Core.dll

可以看到已經正常的監聽了8081端口,這里要注意一下,我們在Program.cs文件中,需要配置這樣:

.UseUrls("http://*:8081")

否則的話,系統找不到我們對應的端口信息。

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

docker build -t laozhang/apkimg .

其中laozhang/apkimg是我們的鏡像名。

因為我們的Dockerfile是五步,所以這里也正好是5個Step。

然后查看機器上的鏡像:

這里多了兩個鏡像,一個是我們的鏡像ID為af75a6d4a8ad,大小146M的項目文件,一個是我們Dockerfile的源鏡像。

4、推送鏡像到Docker hub倉庫

既然咱們有了鏡像,如果每次使用都要build,肯定是不對的,咱們可以統一推送到Hub倉庫里。

先注冊
(注意注冊的時候,第一個選項,這個Docker ID是我們創建的鏡像的ID,

也就是laozhangisphi/apkimg的laozhangisphi)
當然如果不一樣,你后期也可以自己做配置,不要方。

第二:驗證完郵件后,登錄,創建倉庫

第三步:服務器鏡像推送

然后登錄賬號

推送:

docker push laozhangisphi/apkimg:tagname

檢查:

我們登錄管理后臺,查看結果

可以看到已經成功推送了,這樣的話,我們就可以在任何的地方使用我的鏡像啦。

docker pull laozhangisphi/apkimg:latest

現在我們有了鏡像,那就可以創建容器了,因為有了容器才能運行。

5、生成并運行容器

生成容器

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

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

8081是我們的端口號,然后后邊的laozhang/apkimg是我們的鏡像名。

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

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

docker start 53d047bb3a66

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

curl http://localhost:8081/api/blog

如果到了這里,恭喜你,Docker部署NetCore基本已經搞定了,如果你想看看容器內的日志信息。

查看日志

直接輸入命令:

docker?logs?53d047bb3a66

其他常用命令

查看所有鏡像 docker images

刪除一個imageid的鏡像
docker rmi [IMAE_ID]

#刪除所有鏡像
sudo docker rmi $(docker images -q)

#查看所有容器運行狀態
docker ps -a
docker container ls -all

#刪除一個containerid的容器(實例)
docker rm 6f0c67de4b72

#刪除所有容器
docker rm $(sudo docker ps -a -q)

容器日志

#查看指定時間后的日志,只顯示最后100行:
docker logs -f -t --since="2019-06-08" --tail=100 CONTAINER_ID

#查看某時間之后的日志:
docker logs -t --since="2019-06-08" CONTAINER_ID

#查看某時間段日志:
docker logs -t --since="2019-06-08" --until "2019-06-09" CONTAINER_ID

#查看最近30分鐘的日志:
docker logs --since 30m CONTAINER_ID

過程

1、停止容器 docker stop 5ab35ebcb6e2

2、刪除容器 docker rm ?5ab35ebcb6e2

3、刪除鏡像 docker rmi 7567a38d491c

4、啟動容器 docker start ?685cb02f53

剩下最后一步了,nginx代理,因為我們的Docker已經守護了這個進程,所以我們不需要其他的守護進程的工作。

6、Nginx代理服務

進入/etc/nginx/文件夾

修改nginx.conf文件,這里你可以使用 vim ,也可以下載到本地,修改,然后再提交上去,看自己的需要了,反正vim也很簡單,就是那幾個命令:

vim xxx

i

:wq!

如果看不懂,還是下載本地修改吧。

修改的內容如下:

###### apk begin #######server { listen 9001;server_name localhost;location / {root html;proxy_pass http://localhost:8081;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection keep-alive;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_cache_bypass $http_upgrade;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;index index.html index.htm;}}###### apk end #######

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

nginx -t

nginx -s reload

這個時候,如果沒報錯,那恭喜,項目啟動成功了!

http://192.144.227.46:9001/index.html

好啦,今天到這里已經完全說完了,整個過程大約2個小時,中間沒發現什么問題,因為我有Linux的基礎,所以總體還是很簡單的,主要就是docker的那幾個常用命令,需要看文檔查一查。加油!

總結

以上是生活随笔為你收集整理的[跨平台系列三Docker篇]:ASP.NET Core应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。