Docker在Linux上執行NetCore系列(一)配置執行DotNetCore控制檯 Docker在Linux/Windows上執行NetCore文章系列
轉發請註明此文章作者與路徑,請尊重原著,違者必究。
系列文章: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】
圖一:
圖二:
圖三:
建立完成後,可以看到專案的架構多了檔案Dockerfile,與docker-compose。
主要看Dockerfile,它是描述了整個專案從編譯到執行所依賴的環境,怎麼去執行此程式。至於docker-compose目錄,可以刪除。其作用是在告訴VS所要執行docker的入口點,並且可以定義多個不同容器中的依賴關係來執行。這裡不講述docker-compose。
修改Dockerfile檔案
修改下面的Dockerfile檔案,修改了路徑,把專案資料夾去掉了。因為執行Dockerfile的時候,是在Dockerfile所在的資料夾內執行。具體每行代表什麼,後面會說明。
修改完成了Dockfile檔案後,下一步就是要把程式碼放到Linux映象中了。
在Linux使用Docker執行程式的方式
現在想到有3種方式執行在Linux上。第一種可以通過複製當前的專案原始碼到Linux中編譯並且執行。第二種是上傳原生代碼,然後在Linux使用git clone執行。第三種是在另外一臺Linux成功構建映象後,上傳到線上倉儲,最後在目標Linux下載映象並在倉庫中執行。
第一種與第二種類似,都是需要獲取程式碼,只是獲取程式碼方式不同而已。第三種是通過線上釋出再拉取的做法。
下面我們主要討論第一種。第二、三種在另外一篇文章使用使用到。
在Docker中執行Dockfile生成映象
首先需要把程式碼copy到linux中。這裡通過WinSCP工具複製專案檔案到Linux系統中,例如Windows下有下面檔案:
複製到Linux下,通過putty工具檢視資料夾,已經複製成功了。
開始構造映象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超時,所以建議都配上。
配置映象加速器
關於映象加速,可以按照阿里雲的教程,登入賬號:https://cr.console.aliyun.com/cn-shenzhen/mirrors。每個賬號的加速地址應該不一樣。下面內容擷取阿里雲的教程:
執行映象並新增到容器中
使用【sudo docker images】檢視是否存在我們的映象 consoleappdockerlinux2-cmd
可以看到已經安裝映象成功了,我們現在開始執行我們的映象吧:【sudo docker run 映象id】
可以看到我們真的成功了!
關於容器的說明
眾所周知,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】
將程式程式碼複製到原本的路徑上,然後執行命令構建Docker映象【sudo docker build -t consoleappdockerlinux2-cmd:2.0 .】。這裡指明構建2.0的tag。
成功後,執行【sudo docker images】可以檢視到2.0版本的映象了。
使用【docker run 映象id】新增到容器中執行映象,下面看到執行成功了,並且Version 2也打印出來了。
在上面,有沒有發現問題。部署新程式碼執行映象時需要指定映象id,即使用【docker run 映象id】的命令。而且每當重新編譯新版本程式,都會重新生成一個映象id,那麼就矛盾了,每次都需要找到新版本的映象id才會把映象新增到容器中執行?
有什麼解決辦法?不指定映象id是否可以?
所以docker run提供了執行 映象名稱+標籤的命令:【sudo docker run consoleappdockerlinux2-cmd:latest】
所以你每次執行上面的命令,都是最新版本的程式碼。
系列文章
Docker在Linux/Windows上執行NetCore文章系列
可以關注本人的公眾號,多年經驗的原創文章共享給大家。