1. 程式人生 > >Docker在Linux上執行NetCore系列(一)配置執行DotNetCore控制檯 Docker在Linux/Windows上執行NetCore文章系列

Docker在Linux上執行NetCore系列(一)配置執行DotNetCore控制檯 Docker在Linux/Windows上執行NetCore文章系列

原文: Docker在Linux上執行NetCore系列(一)配置執行DotNetCore控制檯

轉發請註明此文章作者與路徑,請尊重原著,違者必究。

 

 

系列文章:https://www.cnblogs.com/alunchen/p/10121379.html

本篇文章作業系統資訊

      Linux:ubuntu 16.04.3 amd64

 

檢視NetCore支援的Linux系統

      NetCore不是支援Linux的所有系統,只支援部分,所以在Linux上安裝NetCore之前要檢視系統與版本是否支援NetCore。

      檢視NetCore2.0以上各個版本在Linux支援的系統及版本:

https://github.com/dotnet/core/blob/master/release-notes/2.0/2.0-supported-os.md

https://github.com/dotnet/core/blob/master/release-notes/2.1/2.1-supported-os.md

https://github.com/dotnet/core/blob/master/release-notes/2.2/2.2-supported-os.md

 

安裝Docker

      安裝docker,參考:https://segmentfault.com/a/1190000014066388

 

開始使用Docker在Linux上執行NetCore

      回想一下我們平常做開發。流程都是使用Windows作業系統,並且使用宇宙最好IDE-VS,來建立專案、釋出、執行。

      這篇文章,主要講述怎麼在linux上運用docker來執行net core程式 。也會使用我們一般會使用到的流行方法去執行net nore,一般的步驟如下:

在Windows上建立專案->修改dockerfile檔案->複製專案到Linux系統->執行dockerfile並建立映象->在docker容器中執行映象。

 

建立專案並且生成Dockerfile                  

      現在,使用VS2017建立一個控制檯專案,並新增Docker的支援,需要注意的是,新增Docker支援時需要選擇Linux環境。具體怎麼新增支援,請檢視下面的截圖。

      右鍵專案->新增->容器業務流程協調程式支援->選擇【Docker Compose】->選擇【Linux】

圖一:

1

 

圖二:

clipboard

 

圖三:

clipboard

 

      建立完成後,可以看到專案的架構多了檔案Dockerfile,與docker-compose。

clipboard

 

      主要看Dockerfile,它是描述了整個專案從編譯到執行所依賴的環境,怎麼去執行此程式。至於docker-compose目錄,可以刪除。其作用是在告訴VS所要執行docker的入口點,並且可以定義多個不同容器中的依賴關係來執行。這裡不講述docker-compose。

 

修改Dockerfile檔案                      

      修改下面的Dockerfile檔案,修改了路徑,把專案資料夾去掉了。因為執行Dockerfile的時候,是在Dockerfile所在的資料夾內執行。具體每行代表什麼,後面會說明。

clipboard

 

      修改完成了Dockfile檔案後,下一步就是要把程式碼放到Linux映象中了。

 

在Linux使用Docker執行程式的方式                         

      現在想到有3種方式執行在Linux上。第一種可以通過複製當前的專案原始碼到Linux中編譯並且執行。第二種是上傳原生代碼,然後在Linux使用git clone執行。第三種是在另外一臺Linux成功構建映象後,上傳到線上倉儲,最後在目標Linux下載映象並在倉庫中執行。

      第一種與第二種類似,都是需要獲取程式碼,只是獲取程式碼方式不同而已。第三種是通過線上釋出再拉取的做法。

下面我們主要討論第一種。第二、三種在另外一篇文章使用使用到。

 

在Docker中執行Dockfile生成映象                          

      首先需要把程式碼copy到linux中。這裡通過WinSCP工具複製專案檔案到Linux系統中,例如Windows下有下面檔案:

clipboard

 

      複製到Linux下,通過putty工具檢視資料夾,已經複製成功了。

clipboard

 

      開始構造映象image:執行命令【sudo docker build -t consoleappdockerlinux2-cmd .

      命令中,【consoleappdockerlinux2-cmd】程式碼映象名稱,可以修改成自己所需要的名稱。也可以為映象新增tag,修改【consoleappdockerlinux2-cmd】成【consoleappdockerlinux2-cmd:1.0】為映象打上1.0的tag標籤。命令最後面的【.】號是必要的,是dockerfile在當前目錄執行docker的意思。詳細命令可檢視:http://www.runoob.com/docker/docker-build-command.html

      需要說明的是【sudo】命令是用管理員身份執行,所以要輸入密碼。然後執行docker。

      因為按照配置docker的時候使用了映象加速,所以下載.net core映象很快。如果是國外映象,會timeout超時,所以建議都配上。

clipboard

clipboard

 

配置映象加速器                     

      關於映象加速,可以按照阿里雲的教程,登入賬號:https://cr.console.aliyun.com/cn-shenzhen/mirrors。每個賬號的加速地址應該不一樣。下面內容擷取阿里雲的教程:

執行映象並新增到容器中           

      使用【sudo docker images】檢視是否存在我們的映象 consoleappdockerlinux2-cmd

clipboard

 

      可以看到已經安裝映象成功了,我們現在開始執行我們的映象吧:【sudo docker run 映象id

clipboard

      可以看到我們真的成功了!

 

關於容器的說明              

      眾所周知,Docker有三大概念:映象、容器、倉庫。映象是容器與倉庫的橋樑,它們都需要用到映象。上面我們把映象新增到容器中執行,當使用【docker container ls】時,不會看到任何的容器,因為我們的控制檯程式執行結束了。

      所以如果要看到所有的容器,無論是執行中還是停止的,可使用命令【sudo docker ps -a】。

 

詳細介紹Dockerfile各行代表的意思          

 

 

 

 

演示更新版本                             

      安裝完成程式之後,一般都需要更新版本。這裡再簡單地演示一次。

      在程式碼中更新了程式,控制檯輸出改成 “Hello World! 這是我第一次執行在Docker Linux中。 Version 2”。

      為了演示更直觀,首先將映象 consoleappdockerlinux2-cmd打上tag,1.0版本。【sudo docker tag consoleappdockerlinux2-cmd consoleappdockerlinux2-cmd:1.0

clipboard

 

      將程式程式碼複製到原本的路徑上,然後執行命令構建Docker映象【sudo docker build -t consoleappdockerlinux2-cmd:2.0 .】。這裡指明構建2.0的tag。

成功後,執行【sudo docker images】可以檢視到2.0版本的映象了。

clipboard

 

      使用【docker run 映象id】新增到容器中執行映象,下面看到執行成功了,並且Version 2也打印出來了。

clipboard

 

      在上面,有沒有發現問題。部署新程式碼執行映象時需要指定映象id,即使用【docker run 映象id】的命令。而且每當重新編譯新版本程式,都會重新生成一個映象id,那麼就矛盾了,每次都需要找到新版本的映象id才會把映象新增到容器中執行?

      有什麼解決辦法?不指定映象id是否可以?

      所以docker run提供了執行 映象名稱+標籤的命令:【sudo docker run consoleappdockerlinux2-cmd:latest

clipboard

 

      所以你每次執行上面的命令,都是最新版本的程式碼。

 

 

系列文章

Docker在Linux/Windows上執行NetCore文章系列

 

可以關注本人的公眾號,多年經驗的原創文章共享給大家。