**简要描述:**

- 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"将镜像拉取到,并运行,就可以访问了.

VS2017 docker部署工具的使用的更多相关文章

  1. Docker 管理工具 Portainer部署

    Docker 管理工具 Portainer部署 一.官网 官网:http://www.portainer.io 演示地址:http://demo.portainer.io 用户名:admin 密码:t ...

  2. Docker管理工具 - Swarm部署记录

    之前介绍了Docker集群管理工具-Kubernetes部署记录,下面介绍另一个管理工具Swarm的用法,Swarm是Docker原生的集群管理软件,与Kubernetes比起来比较简单. Swarm ...

  3. 基于VS2017的Docker Support体检ASP.NET Core站点的Docker部署

    最近在学习如何用 Docker 部署生产环境中的 ASP.NET Core 站点,作为一个 Docer 新手,从何处下手更容易入门呢?一开始就手写 Docker 配置文件(Docfile, docke ...

  4. 手把手教你 Docker部署可视化工具Grafana

    一.Grafana的简单介绍 Grafana是开源的.炫酷的可视化监控.分析利器,无论您的数据在哪里,或者它所处的数据库是什么类型,您都可以将它与Grafana精美地结合在一起.它还有丰富的套件供您选 ...

  5. Asp.Net Core 程序部署到Linux(centos)生产环境(二):docker部署

    运行环境 照例,先亮环境:软件的话我这里假设你已经批准好了.net core 运行环境,未配置可以看我的这篇[linux(centos)搭建.net core 运行环境] 腾讯云 centos:7.2 ...

  6. NetCore的Docker部署

    NetCore的Docker部署 一.NetCore与Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或 ...

  7. ASP.NET Core开发-Docker部署运行

    ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...

  8. 在生产环境使用Docker部署应用

    导读 Docker现在越来越流行,但是真正在生产环境部署Docker还是个比较新的概念,还没有一个标准的流程.作者是ROR的程序员,作者结合平时的部署经验,联系Docker的特点,向大家分享了其在生产 ...

  9. Capsule:开源的 JVM 应用部署工具

    [编者按]本文作者 Ron Pressler 是 Parallel Universe 公司的创始人,拥有着丰富的高性能开发经验.通过这篇文章,Ron 向大家详细介绍了全新的开源 JVM 部署工具--C ...

随机推荐

  1. 怎样在mybatis里向mysql中插入毫秒数的时间?

    由于业务场景需求,需要记录精准的时间,但是呢,又不要想使用int类型来存储时间,因为这样的可读性比较差了. 怎样在mybatis中向数据库插入毫秒级别的时间呢? 首先,先来看看怎样向数据库中插入毫秒时 ...

  2. 寒假小软件开发记录06--apk生成

    先在strings.xml中修改了软件名称,再修改软件图标. 在Android模式下,进入Image Asset,进行图标的修改: android studio中,build->generate ...

  3. Python的GUI用法1

    代码: #python GUI的例子1 import tkinter as tk class Window: def __init__(self,master): frame = tk.Frame(m ...

  4. 本地Oracle客户端11g升级12c导致PowerCenter无法连接ODBC数据源

    问题: 本地Oracle客户端由11g-32bit升级为12c-64bit时,在PowerCenter Designer使用原来的ODBC连接导入数据库表时,发生如下错误: 原因: 原oracle11 ...

  5. SQL三表左关联查询

    今天在开发的时候遇到了一个需求就是三遍关联查询,表A包含有表B和表C的uid,然后使用left join左关联查询: SELECT c.`uid`, `fromuseruid`, `touseruid ...

  6. yum install --downloadonly 下载依赖包研究

    在CentOS中可以使用yum自动安装软件,在离线环境中却行不通. Linux localhost 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 U ...

  7. Net使用RdKafka引发异常RdKafka.Internal.LibRdKafka 的类型初始值设定项引发异常

    在Net中VS2015用RdKafka组件开发消息发布和消费,引发下面的异常 RdKafka.Internal.LibRdKafka 的类型初始值设定项引发异常System.TypeInitializ ...

  8. 解决AssetBundle包加载预制体时,Shader显示异常的问题

    现象: 预制体上的粒子效果显示为紫色方块. 原因:shader在打成AB包后与指定平台产生相关性,Editor中无法正常读取. 解决办法: 遍历所有加载的对象,重新赋值Shader 代码: //修正s ...

  9. xml文件配置新增与读取

    xml文件 <?xml version="1.0" encoding="utf-8" ?> <Config> <dbtype> ...

  10. socket的阻塞与非阻塞,同步与异步

    同步/异步主要针对C端: 同步:      所谓同步,就是在c端发出一个功能调用时,在没有得到结果之前,该调用就不返回.也就是必须一件一件事做,等前一件做完了才能做下一件事. 例如普通B/S模式(同步 ...