VS2017 docker部署工具的使用
**简要描述:**
- 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"将镜像拉取到,并运行,就可以访问了.