[跨平台系列三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、更新系統 [可選]
新買的系統,我們可以更新一下,畢竟有些包或者依賴最新的還是更好的,不過也不是必須的。
預計310M,預計10~20分鐘
2、安裝Git [可選]
我們如果要構建鏡像的話,肯定需要發布好的問題+Dockerfile,那發布有三種方式:
第一種就是本地發布,拷貝到服務器,build 鏡像;
第二種是本地發布,然后本地build,推到倉庫里,服務器拉取;
第三種就是服務器PULL代碼,然后服務器發布,再build;
我習慣了第三種,所以我這里安裝Git了。
預計5m,1~5分鐘
3、安裝Nginx [必要]
我們創建好的容器run后,Docker會自己守護這個進程,但是還是需要一個服務器來做代理和反向代理,一般常用的就是Nginx了:
預計14m,1~5分鐘
啟用和啟動服務:
4、安裝Dotnet SDK?[核心]
每臺計算機只需要執行一次此操作。
預計119M,20~30分鐘,這個時間比較長,所以你可以考慮在本地發布好,ftp到服務器,當然如果創建了sdk,以后就省事兒了,反正各有利弊。
安裝成功,測試一下版本:
完成!
到了這里,我們輔助工具已經安裝完成了,接下來,重頭戲就來了——Docker安裝。
3、安裝Docker環境
1、安裝Docker源
首先,我們可以先執行下卸載命令,如果你之前安裝過,或者系統自帶了,需要卸載干凈:
然后我們就可以安裝指定的源了,有官方版本和阿里云版本,我這里嘗試使用阿里云版本的吧,聽說會快一些。
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開機啟動
啟動docker
查看版本
2、測試Hello World
檢查docker是否可以正常運行(運行hello-world鏡像,如果本機沒有hello-world鏡像,系統會自動拉取hello-world鏡像)
如果本地沒有改鏡像,會自動從遠程倉庫拉取,然后再生成容器。
這個時候,我們可以來檢查一下:
當前服務器有哪些鏡像:
可以看到,這個就是剛剛我們拉取的鏡像:名稱是hello-world,ID是bf756fb1ae65,大小13.3k的鏡像。
那如何查看有哪些容器呢:
這個就是剛剛我們看到有輸出內容的容器:容器ID是4fb4bdc352ff,鏡像是hello-world,狀態是已退出。
這個時候,我們的環境已經已經搞好了,接下來就是重中之重,將我們的項目發布鏡像文件了。
4、發布自己的鏡像
1、添加Docker支持
這個操作是很簡單的,我們打開Blog.Core項目,選擇Web層,然后添加Docker支持:
會生成一個Dockerfile的文件,默認的信息比較多,目前我就來個最簡單的精簡版:
簡介一下:
FROM:意思是我們的項目源鏡像是哪個;
WORKDIR:鏡像的工作目錄;
COPY:復制文件(將Dockerfile所在目錄下文件復制到鏡像中的工作目錄中)
EXPOSE:容器要開放的端口(我們用.NETCORE的8081端口)
ENTRYPOINT:為容器啟動后要執行的命令 (這里將執行dotnet Blog.Core.dll命令)
然后右鍵,始終屬性、始終復制到輸出(bin)目錄:
接下來就是上次到Github了。
2、發布
我們在服務器用Git將代碼PULL下來,然后執行發布命令,我用一個批處理文件,直接一鍵生成(主要是防止漏掉文件):
執行發布命令:
就可以看到生成好的發布文件夾.PublishFiles。
接下來就是docker 編譯鏡像了。
3、創建鏡像
進入到我們的發布文件夾.PublishFiles文件夾下,我們測試一下這個文件是否正常:
可以看到已經正常的監聽了8081端口,這里要注意一下,我們在Program.cs文件中,需要配置這樣:
否則的話,系統找不到我們對應的端口信息。
沒問題后,開始build了,還是在當前文件夾下(記得那個點):
其中laozhang/apkimg是我們的鏡像名。
因為我們的Dockerfile是五步,所以這里也正好是5個Step。
然后查看機器上的鏡像:
這里多了兩個鏡像,一個是我們的鏡像ID為af75a6d4a8ad,大小146M的項目文件,一個是我們Dockerfile的源鏡像。
4、推送鏡像到Docker hub倉庫
既然咱們有了鏡像,如果每次使用都要build,肯定是不對的,咱們可以統一推送到Hub倉庫里。
先注冊
(注意注冊的時候,第一個選項,這個Docker ID是我們創建的鏡像的ID,
也就是laozhangisphi/apkimg的laozhangisphi)
當然如果不一樣,你后期也可以自己做配置,不要方。
第二:驗證完郵件后,登錄,創建倉庫
第三步:服務器鏡像推送
然后登錄賬號
推送:
檢查:
我們登錄管理后臺,查看結果
可以看到已經成功推送了,這樣的話,我們就可以在任何的地方使用我的鏡像啦。
現在我們有了鏡像,那就可以創建容器了,因為有了容器才能運行。
5、生成并運行容器
生成容器
有了鏡像,我們來生成一個容器:
8081是我們的端口號,然后后邊的laozhang/apkimg是我們的鏡像名。
會看到輸出內容,如果沒有報錯的話,就恭喜啦,退出當前進程,查看下有哪些容器:
這時候可以看到多了一個容器ID為53d047bb3a66,鏡像是laozhang/apkimg的容器,不過我們的項目容器是退出狀態,需要開啟下:
狀態已經是運行中了,那怎么測試接口是否正常了呢,可以用curl命令:
如果到了這里,恭喜你,Docker部署NetCore基本已經搞定了,如果你想看看容器內的日志信息。
查看日志
直接輸入命令:
其他常用命令
查看所有鏡像 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!
如果看不懂,還是下載本地修改吧。
修改的內容如下:
接下來就是重啟Nginx服務,首先可以檢測語法錯誤:
這個時候,如果沒報錯,那恭喜,項目啟動成功了!
http://192.144.227.46:9001/index.html
好啦,今天到這里已經完全說完了,整個過程大約2個小時,中間沒發現什么問題,因為我有Linux的基礎,所以總體還是很簡單的,主要就是docker的那幾個常用命令,需要看文檔查一查。加油!
總結
以上是生活随笔為你收集整理的[跨平台系列三Docker篇]:ASP.NET Core应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【翻译】.NET 5 Preview5发
- 下一篇: asp.net ajax控件工具集 Au