Docker的使用初探(二):Docker與.NET Core的結合

Docker的使用初探(二):Docker與.NET Core的結合

在兩者的結合上,微軟官方給予了很大的支持,從官方發佈的一些文章和VS 2017在創建.NET Core項目時自帶的Docker選項均可以看出來,這也與Core的跨平臺特性有很大的關係,而Docker正是能夠選擇以Linux或Windows環境部署web

添加Dockefile

上一篇文章介紹瞭如何拉取Core的官方鏡像,可是咱們終究要將Docker應用到咱們的開發環境中,如何將咱們本身的項目生成爲鏡像並部署到Docker上呢?第一步就添加Dockerfile這個文件,在VS2017中大體是三種方法,它們稍有區別,但最終也都是創建了一個Dockerfile文件docker

1. 在建立項目時添加

在新建Core項目時,勾選「啓用Docker支持」選項,新建的項目會自動添加dockerfile文件,文件的具體內容在下文進行分析shell

2. 手動添加

已經在使用的項目能夠經過「右鍵-添加-Docker支持」,這樣也能夠新建Dockerfile文件windows

3. 容器業務流程協調控制程序支持

這種方法相對於前兩種比較特殊,它再也不是單單增長一個Dockerfile文件,而是如名稱通常是一整條生產鏈,用於配合持續集成工具的開發-調試-生成-發佈一條龍服務。添加的方式與第二種相同,右鍵項目添加就能看到這個拗口的名字服務器

使用這種方式除了生成Dockerfile文件還會在解決方案中添加一個名爲Docker Compose的業務流程協調程序,在新建時能夠選擇,可是默認自帶的只有這個。裏面包含兩個文件,一個是 .dockerignore 這個和git相似,裏面記錄的文件不會被打包成鏡像發佈,另外一個是 docker-compose.yml ,用於配置這個業務流程的信息,如鏡像名稱和Dockerfile文件的路徑等網絡

Dockefile語法

大概是有如下這些,挑幾個用到的說一下app

FROM
MAINTAINER
RUN
CMD
EXPOSE
ENV
ADD
COPY
ENTRYPOINT
VOLUME
USER
WORKDIR
ONBUILD
  • FROM

FROM <image>工具

說明使用的鏡像,若是本地沒有會自動拉取對應名稱的鏡像,沒有指定標籤的狀況默認就是latest網站

FORM指令是Dockerfile文件的第一行,但能夠不惟一,根據須要能夠有多個

以默認的Core項目爲例,這裏拉取的就是Core的官方鏡像,上篇文章也有用到,分別是運行時和SDK

  • WORKDIR

WORKDIR <工做目錄路徑>

顯而易見就是鏡像被安裝的路徑,若是路徑不存在,Docker會自動建立

  • COPY

COPY <源路徑> <目標路徑>

將文件和目錄複製到容器的文件系統。文件和目錄需位於相對於 Dockerfile 的路徑中。

  • RUN

RUN <Shell/exec>

在當前鏡像上要執行的命令,可使用shell或者exec的格式

  • EXPOSE

EXPOSE <端口>

服務端容器對外映射的本地端口

  • ENTRYPOINT

使用格式 RUN 同樣,可是這個命令是在容器啓動後執行的命令,不會被 RUN 命令覆蓋,一個Dockerfile裏面只能有一個,若是有多個則只執行最後一條

其他的指令還沒怎麼用到,用法還不太清楚

Docker項目調試

咱們在前面提到了三種建立Dockerfile文件的方法,其實是兩種狀況,針對這兩種狀況,打包鏡像的方法也不一樣

僅添加文件的方式

使用 docker build -t <name> <path> 指令。這種狀況更加泛用,不管是否是用VS建立的均可以使用這種指令打包鏡像

進入Dockerfile文件所在的路徑後執行命令便可

爲了演示,我先刪除的core的官方sdk,因爲在Dockerfile裏面咱們寫入了使用了 FROM 命令,因此執行命令後咱們發現Docker自動下載了鏡像,而且打包了咱們的項目,可是最後有一句 image operating system "windows" cannot be used on this platform ,由於我這邊Docker使用的是Linux模式,這裏咱們構建的是Windows的容器鏡像,因此須要切換一下,系統右下角托盤圖標右鍵「switch to ...」,

爲了體現Dockerfile指令的效果,咱們刪除以前建立的鏡像再執行一次Build指令,此次Docker沒有下載Core的sdk,由於以前已經下載過了。不過我在這裏遇到了網絡問題,發現以前的鏡像拉取也失敗了,因此換了一個鏡像加速地址,而後簡化了一下dockerfile文件,而後重複上面的操做就好了

FROM microsoft/dotnet:2.1-aspnetcore-runtime
WORKDIR /app
COPY . .
EXPOSE 80
ENTRYPOINT ["dotnet", "CoreDockerDemo1.dll"]

能夠看到dockerfile裏面的指令被依次執行,完成以後咱們使用 docker image ls 就能夠看到咱們構建的鏡像了,以後用上面的方法能夠建立Docker便可

容器業務流程協調控制程序支持

使用這種方式就不須要本身手動構建了,只要在VS裏的調試按鈕點一下便可。因爲咱們前面添加過這套協調控制程序,因此如今這個項目裏能夠直接選擇docker進行調試

在這以前要對 docker-compose.yml 文件進行配置,基本上與dockerfile相似,並且更加直觀,對應輸入名稱等就行了

我在第一次生成時出現了「未啓用卷共享」的錯誤,這裏咱們須要在Docker的設置中的Shared Drives標籤中把程序生成構建的磁盤選中,而後點擊「Apply」按鈕應用設置,而後docker會自動重啓

設置完成後再點擊VS中的運行,web應用就會自動編譯生成並建立鏡像和容器,而後啓動網站。第一次啓動時可能會詢問是否受權SSL證書,進行受權便可


基本上有了這些,就能夠利用Docker給開發工做帶來一些便捷,若是後面還要繼續深刻的話,就是將Docker與持續集成結合起來應用到網站服務器環境上

相關文章
相關標籤/搜索