轉發請註明此文章做者與路徑,請尊重原著,違者必究。html
系列文章:http://www.javashuo.com/article/p-zqmedlqz-bg.htmllinux
Linux:ubuntu 16.04.3 amd64git
NetCore不是支持Linux的全部系統,只支持部分,因此在Linux上安裝NetCore以前要查看系統與版本是否支持NetCore。github
查看NetCore2.0以上各個版本在Linux支持的系統及版本:docker
https://github.com/dotnet/core/blob/master/release-notes/2.0/2.0-supported-os.mdubuntu
https://github.com/dotnet/core/blob/master/release-notes/2.1/2.1-supported-os.mdsegmentfault
https://github.com/dotnet/core/blob/master/release-notes/2.2/2.2-supported-os.md架構
安裝docker,參考:http://www.javashuo.com/article/p-qdmptyqe-ba.htmlapp
回想一下咱們日常作開發。流程都是使用Windows操做系統,而且使用宇宙最好IDE-VS,來建立項目、發佈、運行。工具
這篇文章,主要講述怎麼在linux上運用docker來運行net core程序 。也會使用咱們通常會使用到的流行方法去運行net nore,通常的步驟以下:
在Windows上建立項目->修改dockerfile文件->複製項目到Linux系統->運行dockerfile並建立鏡像->在docker容器中運行鏡像。
如今,使用VS2017建立一個控制檯項目,並添加Docker的支持,須要注意的是,添加Docker支持時須要選擇Linux環境。具體怎麼添加支持,請查看下面的截圖。
右鍵項目->添加->容器業務流程協調程序支持->選擇【Docker Compose】->選擇【Linux】
圖一:
圖二:
圖三:
建立完成後,能夠看到項目的架構多了文件Dockerfile,與docker-compose。
主要看Dockerfile,它是描述了整個項目從編譯到運行所依賴的環境,怎麼去運行此程序。至於docker-compose目錄,能夠刪除。其做用是在告訴VS所要運行docker的入口點,而且能夠定義多個不一樣容器中的依賴關係來運行。這裏不講述docker-compose。
修改下面的Dockerfile文件,修改了路徑,把項目文件夾去掉了。由於運行Dockerfile的時候,是在Dockerfile所在的文件夾內運行。具體每行表明什麼,後面會說明。
修改完成了Dockfile文件後,下一步就是要把代碼放到Linux鏡像中了。
如今想到有3種方式運行在Linux上。第一種能夠經過複製當前的項目源代碼到Linux中編譯而且運行。第二種是上傳本地代碼,而後在Linux使用git clone運行。第三種是在另一臺Linux成功構建鏡像後,上傳到線上倉儲,最後在目標Linux下載鏡像並在倉庫中運行。
第一種與第二種相似,都是須要獲取代碼,只是獲取代碼方式不一樣而已。第三種是經過線上發佈再拉取的作法。
下面咱們主要討論第一種。第2、三種在另一篇文章使用使用到。
首先須要把代碼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】。
安裝完成程序以後,通常都須要更新版本。這裏再簡單地演示一次。
在代碼中更新了程序,控制檯輸出改爲 「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文章系列
能夠關注本人的公衆號,多年經驗的原創文章共享給你們。