**簡要描述:**
- VS2017的docker支持工具,支持對.Net Framework,.Net Core控制台或者Web應用,在docker中生成,調試,運行。對於.Net Framework支持windows容器與鏡像, 對於.Net Core應用支持linux容器與鏡像. VS2017 Preview版本對於.Net Core對於linux還是windows容器與鏡像都是支持的。
**環境准備:**
```
安裝docker for windows,安裝步驟參照前面的【Docker安裝流程】
在docker里配置私有倉庫,Setting->Daemon->Insecure registries 填入私有倉庫url
在docker里配置共享磁盤,用來存放容器。一般共享C盤,Setting->Shared Drives
```
**創建.Net Core Web項目:**
- .Net Core Web本身就可以用控制台的方式來運行,這個跟我們所用的api框架運行原理是類似的。
- .創建項目后,選擇項目->添加->docker 支持

- .在項目上添加【docker 支持】后,就會有個docker-compose的項目添加進來.在docker-compose的項目里,產生了一些.yml文件。並在【WebApplication2】項目中,增加了個DockerFile的文件.

**docker-compose介紹:**
- .docker-compose是用來在Docker中定義和運行復雜應用的工具,現在集成到VS里面來了。
1. docker-compose和VS解決方案的關系
```
一個解決方案對應一個docker-compose項目,它由docker-compose.yml和它的子文件組件,子文件用來對它進行補充!
```
2. docker-compose和VS與項目的關系
```
一個docker-compose包括了所有可以發布的項目,這些項目在compose里被稱為一個服務!
```
3. Dockerfile與VS項目的關系
```
一個Dockerfile對應一個具體的項目,可以是網站,API,控制台程序等,主要對它們進行發布,運行等!
```
4. docker-compose和Dockerfile的關系
```
一個docker-compose會包括多個Dockerfile,而每個Dockerfile對應於一個鏡像,也就是說,很多鏡像組件了一個服務,一個docker-compose,我們可以按着自己的規則去划分服務,docker-compose最小管理單元是"服務"!
```
5. 各.yml文件的作用
```
docker-compose.ci.build.yml定義了編譯項目的ci命令,基礎鏡像版本
docker-compose.yml定義了個項目對應的鏡像集合,鏡像對應的DockerFile路徑及名稱
docker-compose.override.yml定義了環境變量,與宿主的映射端口
docker-compose.vs.debug.yml定義了在debug模式下的docker編譯的配置
docker-compose.vs.release.yml定義了在release模式下的docker編譯的配置
詳細了解.yml文件,請參考下面的網址:
http://www.cnblogs.com/freefei/p/5311294.html
```
**DockerFile介紹:**
- .DockerFile定義了項目編譯成鏡像的行為過程。
```
詳細了解DockerFile,請參考下面的網址:
http://blog.csdn.net/wsscy2004/article/details/25878223
```
**Docker環境下debug項目:**
1. 選擇docker-compose,設為啟動項目
2. 將本地的docker切換到linux容器模式
4. 設置debug模式下
5. 在VS中按f5,運行項目,你可以在vs的“輸出”里,看到整個的編譯過程,並且項目編譯成鏡像,生成容器,運行容器的過程。
6. 在powershell里,執行“docker ps”就可以看到,有個容器已經運行起來了。

7. 在powershell里,執行“docker images”就可以看到新生成的鏡像。

8. 新的鏡像的名稱與tag是在docker-compose.vs.debug.yml定義的,這些都可以在文件里修改。

9. 在vs的項目中設置斷點,並訪問已經運行起來的頁面,如果是接口的話,就訪問接口,就可以調試程序。

10. 調試過程中,如果發現問題,修改了代碼,只要重新f5運行,會在docker里自動編譯新的鏡像與容器。
11. 這邊要強調下的是,在debug下生成的鏡像不是可用的鏡像,因為它只能被vs使用。如果手動用"docker run"是不能生成容器的.
**Docker環境下Release項目:**
1. 如果在debug下,已經沒有任何問題了,那么就可以把項目release到docker中,作為測試或者發布用
2. Release下主要在docker-compose.vs.release.yml這個文件里配置,生成的鏡像名稱與tag都可以改.這里要注意的是即使在鏡像名稱上加了私有倉庫的地址[私有倉庫地址:端口]\imageName: tag,鏡像編譯成功后,也是不會自動推到私有倉庫的。
3. 設置Release模式
4. 在vs按f5,運行,成功后,可以看到對應的鏡像已經生成成功了。

5. 因為vs是集成了docker-compose的功能,所以通過powershell,cd到項目的docker-compose文件的所在目錄,運行docker-compose build一樣可以成功生成鏡像.關於docker-compose 命令更多的知識可以,參考:http://www.cnblogs.com/52fhy/p/5991344.html
**推送鏡像到私有倉庫並發布:**
1. 通過"docker push"將生成鏡像推送到私有倉庫。
2. 在測試環境中,通過"docker pull"將鏡像拉取到,並運行,就可以訪問了.

