1. 程式人生 > >Docker在Linux上運行NetCore系列(一)配置運行DotNetCore控制臺

Docker在Linux上運行NetCore系列(一)配置運行DotNetCore控制臺

oob 什麽 right world! wid timeout tty 分享圖片 image

原文: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】

圖一:

技術分享圖片

圖二:

技術分享圖片

圖三:

技術分享圖片

創建完成後,可以看到項目的架構多了文件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文章系列

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

技術分享圖片

Docker在Linux上運行NetCore系列(一)配置運行DotNetCore控制臺