Docker的使用初探(二):Docker與.NET Core的結合 [TOC] 在二者的結合上,微軟官方給予了很大的支持,從官方發佈的一些文章和VS 2017在建立.NET Core項目時自帶的Docker選項都可以看出來,這也與Core的跨平臺特性有很大的關係,而Docker正是可以選擇以Lin ...
目錄
Docker的使用初探(二):Docker與.NET Core的結合
在二者的結合上,微軟官方給予了很大的支持,從官方發佈的一些文章和VS 2017在建立.NET Core項目時自帶的Docker選項都可以看出來,這也與Core的跨平臺特性有很大的關係,而Docker正是可以選擇以Linux或Windows環境部署
添加Dockefile
上一篇文章介紹瞭如何拉取Core的官方鏡像,但是我們終究要將Docker應用到我們的開發環境中,如何將我們自己的項目生成為鏡像並部署到Docker上呢?第一步就添加Dockerfile這個文件,在VS2017中大致是三種方法,它們稍有區別,但最終也都是建立了一個Dockerfile文件
1. 在創建項目時添加
在新建Core項目時,勾選“啟用Docker支持”選項,新建的項目會自動添加dockerfile文件,文件的具體內容在下文進行分析
2. 手動添加
已經在使用的項目可以通過“右鍵-添加-Docker支持”,這樣也可以新建Dockerfile文件
3. 容器業務流程協調控製程序支持
這種方法相對於前兩種比較特殊,它不再是單單增加一個Dockerfile文件,而是如名稱一般是一整條生產鏈,用於配合持續集成工具的開發-調試-生成-發佈一條龍服務。添加的方式與第二種相同,右鍵項目添加就能看到這個拗口的名字
使用這種方式除了生成Dockerfile文件還會在解決方案中添加一個名為Docker Compose的業務流程協調程式,在新建時可以選擇,但是預設自帶的只有這個。裡面包含兩個文件,一個是 .dockerignore
這個和git類似,裡面記錄的文件不會被打包成鏡像發佈,另一個是 docker-compose.yml
,用於配置這個業務流程的信息,如鏡像名稱和Dockerfile文件的路徑等
Dockefile語法
大概是有以下這些,挑幾個用到的說一下
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與持續集成結合起來應用到網站伺服器環境上