Docker的使用初探(二):Docker与.NET Core的结合
目錄
- Docker的使用初探(二):Docker與.NET Core的結合
- 添加Dockefile
- 1. 在創建項目時添加
- 2. 手動添加
- 3. 容器業務流程協調控制程序支持
- Dockefile語法
- Docker項目調試
- 僅添加文件的方式
- 容器業務流程協調控制程序支持
- 添加Dockefile
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 ONBUILDFROM
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與持續集成結合起來應用到網站服務器環境上
轉載于:https://www.cnblogs.com/LFeather/p/10264619.html
總結
以上是生活随笔為你收集整理的Docker的使用初探(二):Docker与.NET Core的结合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JMeter中的HTTPS套接字错误
- 下一篇: 查询每日规定时间段内的记录