目錄git
在兩者的結合上,微軟官方給予了很大的支持,從官方發佈的一些文章和VS 2017在創建.NET Core項目時自帶的Docker選項均可以看出來,這也與Core的跨平臺特性有很大的關係,而Docker正是能夠選擇以Linux或Windows環境部署web
上一篇文章介紹瞭如何拉取Core的官方鏡像,可是咱們終究要將Docker應用到咱們的開發環境中,如何將咱們本身的項目生成爲鏡像並部署到Docker上呢?第一步就添加Dockerfile這個文件,在VS2017中大體是三種方法,它們稍有區別,但最終也都是創建了一個Dockerfile文件docker
在新建Core項目時,勾選「啓用Docker支持」選項,新建的項目會自動添加dockerfile文件,文件的具體內容在下文進行分析shell
已經在使用的項目能夠經過「右鍵-添加-Docker支持」,這樣也能夠新建Dockerfile文件windows
這種方法相對於前兩種比較特殊,它再也不是單單增長一個Dockerfile文件,而是如名稱通常是一整條生產鏈,用於配合持續集成工具的開發-調試-生成-發佈一條龍服務。添加的方式與第二種相同,右鍵項目添加就能看到這個拗口的名字服務器
使用這種方式除了生成Dockerfile文件還會在解決方案中添加一個名爲Docker Compose的業務流程協調程序,在新建時能夠選擇,可是默認自帶的只有這個。裏面包含兩個文件,一個是 .dockerignore
這個和git相似,裏面記錄的文件不會被打包成鏡像發佈,另外一個是 docker-compose.yml
,用於配置這個業務流程的信息,如鏡像名稱和Dockerfile文件的路徑等網絡
大概是有如下這些,挑幾個用到的說一下app
FROM MAINTAINER RUN CMD EXPOSE ENV ADD COPY ENTRYPOINT VOLUME USER WORKDIR ONBUILD
FROM <image>
工具
說明使用的鏡像,若是本地沒有會自動拉取對應名稱的鏡像,沒有指定標籤的狀況默認就是latest網站
FORM
指令是Dockerfile文件的第一行,但能夠不惟一,根據須要能夠有多個
以默認的Core項目爲例,這裏拉取的就是Core的官方鏡像,上篇文章也有用到,分別是運行時和SDK
WORKDIR <工做目錄路徑>
顯而易見就是鏡像被安裝的路徑,若是路徑不存在,Docker會自動建立
COPY <源路徑> <目標路徑>
將文件和目錄複製到容器的文件系統。文件和目錄需位於相對於 Dockerfile 的路徑中。
RUN <Shell/exec>
在當前鏡像上要執行的命令,可使用shell或者exec的格式
EXPOSE <端口>
服務端容器對外映射的本地端口
使用格式 RUN
同樣,可是這個命令是在容器啓動後執行的命令,不會被 RUN
命令覆蓋,一個Dockerfile裏面只能有一個,若是有多個則只執行最後一條
其他的指令還沒怎麼用到,用法還不太清楚
咱們在前面提到了三種建立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與持續集成結合起來應用到網站服務器環境上