前幾篇文章介紹了Liunx下的環境搭建,今天來分享一下.Net Core在Liunx上的部署。
我采用的方案是使用Dokcer作為運行虛擬機,Nginx作為Http服務器來進行反向代理,你可以理解為Docker就是程序的運行環境,而Nginx就是之前用的IIS。
文章分成兩篇,第一篇寫Docker部署,第二篇寫Nginx代理。
一、編寫Dockerfile
Dockerfile中記錄了我們的程序在Docker環境中的各種配置
FROM microsoft/dotnet #FROM 指定功能所需的基礎鏡像,必須是第一條指令,我們這里指定aspnetcore WORKDIR /web #定義你工作目錄的名字 COPY . ./ #COPY 程序所在本地目錄 容器目錄 例如:COPY ${source:-bin/publish} ./hello 把source所在的目錄下的,bin/publish子目錄的內容復制到容器的hello目錄 ENTRYPOINT ["dotnet", "CZKJ.CMS.Web.dll"] #運行dotnet命令,參數是你的程序集的入口dll--就是你的Web程序dll
配置還有很多例如EXPOSE可以指定對外開放的端口,如果不指定就是默認80,以上幾個配置足夠一般的.NetCore程序使用,以上配置copy下來可以直接使用只需要更改最下面一行的程序集名字就好。
寫好Dockerfile后把Dockerfile放到你的包根目錄下,文件不要加后綴名就只叫:Dockerfile
二、生成鏡像
使用WinScp把你的程序集放到Liunx服務器上,WinScp是一個很好用工具,推薦下載而且免費。
然后遠程鏈接到你的Liunx服務器,推薦一個小工具:Putty很好用的小工具
CD到剛才上傳上來的目錄中:cd /website/PublishOutput 注意要到文件夾里
在這里運行Docker 命令:docker build -t <要生成的鏡像的名稱> . (注意,結尾有個點,這個點是Dockerfile的路徑,因為Dockerfile現在就在當前目錄下,所以打個點就行,-t 參數后的鏡像名字不需要打<>)
例如: dcoerk build -t demo .
Docker 會根據剛才配置的Dockerfile生成鏡像,最后出現Successfully表示成功。
三、啟動實例
上一步我們已經制作好了鏡像,現在我們把鏡像放到Docker里,讓它跑起來。
執行Docker 命令:docker run -d --rm -p 5000:80 --name <實例名稱> <鏡像名稱>
-d會在啟動成功后輸出鏡像的唯一標識碼, --rm 會判斷如果存在同名實例會刪除替換 -p指定程序運行端口 宿主端口:容器端口 注:因為上文中沒有指定EXPOSE所以容器的端口是80 --name 參數后的實例名和鏡像名不需要帶<>
如下圖,我把服務器的5003端口指定到了容器的80端口,現在訪問5003就會訪問到DEMO程序
docker ps 查看所有已經部署的實例
上面的這個命令所部署的實例會在容器重啟或者服務器重啟后自動卸載,也就是說一旦重啟Docker服務或者鏡像之后就這個實例就不存在了,需要重新Docker run,如下圖,重啟服務后剛才部署的實例沒有了
重啟后自動部署使用這條命令:docker run -d --restart=always -p 5000:80 --name <實例名> <鏡像名> 注:--restart 和 --rm 沖突,只能選擇一個
如下圖,使用--restart=always參數后重啟將不影響實例
四、進入鏡像進行文件的查看更改
執行命令 docker ps 查看現有實例,然后執行命令 docker exec -it <CONTAINER ID> /bin/bash
如下圖,這樣我們就進入了鏡像里面,這個web就是在Dockerfile里定義的那個WORKDIR參數
在鏡像里如果想使用vim看日志或者改配置的話,需要自己安裝,因為鏡像里是沒有vim的可以考慮使用cat.
如果要安裝的話執行以下命令:apt-get update 執行完之后執行 apt-get install vim
安裝完成后就可以使用vim了
五、停止、刪除實例和鏡像
停止命令:docker stop 實例ID
如圖,我們停止了剛才啟動的實例
刪除已經生成的鏡像命令
docker images 查看所有的鏡像
docker rmi 鏡像ID 刪除指定鏡像
刪除前需要停止鏡像,否則會刪除失敗,如下圖,首先要停止鏡像,然后刪除鏡像,不然會報錯
至此,.NET Core在Docker中部署完畢,下一篇介紹使用Nginx進行反向代理。