在Hyper-V的Docker主机上使用Visual Studio Docker工具

简介: 本文讲的是在Hyper-V的Docker主机上使用Visual Studio Docker工具【编者的话】本文主要介绍了在Windows下使用Hyper-V和Visual Studio来进行容器化的实践,及遇到的问题和相应解决方法。
本文讲的是在Hyper-V的Docker主机上使用Visual Studio Docker工具【编者的话】本文主要介绍了在Windows下使用Hyper-V和Visual Studio来进行容器化的实践,及遇到的问题和相应解决方法。

在过去的几周,我一直在研究使用 Visual Studio的Docker工具 来将ASP.NET核心应用容器化。这使得你可以在Docker容器内本地开发和调试应用。为了实现这个目标,你需要一个本地的Docker主机。虽然你可以向IT部门申请提供一个,但是发现在我笔记本上本地运行虚拟机更加方便快捷,这样无论我在哪都可以随时用它。为了创建一个本地Docker主机,你需要使用 Docker工具箱 。使用VirtualBox创建一个本地虚拟机作为你的Docker主机。然而,我已经安装Hyper-V作为虚拟化管理程序。Hyper-V在Windows 10上工作非常完美,所以我想保留这个程序。但不幸的是,VirtualBox和Hypser-V并不兼容(简短说就是如果Hyper-V开启了,VirtualBox就无法安装)。

解决方案:在Hyper-V上创建一个本地Docker主机。不幸的是这个过程有一些繁琐,所以我认为应该在这介绍一下。

注意 :你当然可以使用Azure运行Docker主机。但是,为了编辑和刷新能够起作用,需要在你的Docker主机和你本地开发机器共享驱动。由于通用的防火墙和网络限制,这功能在Azure虚拟机上经常很难获得。本地Docker主机则可以很优雅的获得该功能。

准备

在使用Visual Studio的Docker工具前,需要进行一些安装:

设置网络

下一步是创建一个本地Docker主机。首先,我们先设置Hyper-V的配置项。

我们需要创建一个虚拟网卡给Docker主机连接,并保证有网络接入权限。在Hyper-V管理工具中打开虚拟网卡管理,创建一个新的虚拟网卡。修改名称,并保证它位于局域网中。
01.png

我们在这里使用局域网,来保证即使重启或者连接开发机器到一个不同网络后IP地址也保持一致。使用局域网的副作用是它没有连接到你的外部网络,所以像从公共仓库上下载Docker镜像,或者从公共源上恢复NuGet包将不起作用。为了解决这个问题,我们使用网络连接共享来共享我们的internet连接给新建的内部网络。

打开“查看网络连接”窗口(Windows 10中只需搜索“network”就会显示):
02.png

从那里打开有网络连接的适配器属性页(以我为例,它是一个桥接的适配器),在共享页打卡网络连接共享。选择你的内部网络作为主网络连接。
03.png

创建Docker主机虚拟机

下一步是创建虚拟机,它将是你的Docker主机。Docker工具箱提供稍微优雅的命令行工具来管理Docker主机:docker-machine. 你可以使用这个创建、启动、停止或者删除Docker主机。

打开PowerShell命令行提示,输入如下命令创建Docker主机:
$ docker-machine create --driver hyperv --hyperv-virtual-switch "<your virtual switch>" <your vm name>

04.png

这将会花费一点时间,但是当他完成后,你会在Hyper-V管理工具中看到你的新建虚拟机在运行。
05.png

最后需要做的是设置环境,来使用新建的虚拟机作为运行的机器。可以在PowerShell提示行中输入如下命令:
$ docker-machine env <your vm name> | Invoke-Expression

然后输入“docker-machine ps”来验证你的新虚拟机确实在运行。
06.png

共享硬盘使 “编辑和刷新”工作

为了使编辑和刷新起作用,Visual Studio的Docker工具箱希望开发机器上代码的路径与Docker主机共享为同一个路径。如果你使用的是VirtualBox,Docker工具箱自动处理了这些。但是,使用Hyper-V你得自己处理这些问题。

在我遇到的情况中,我将所有代码保存在我Windows机器的 “D:\Git”。我们需要共享这个目录给Docker虚拟主机,但是由于这是一个Linux虚拟机,代码路径看着会有些不同: “/d/Git”。我们使用普通的Windows网络共享来得到这个功能。

首先,在Windows机器上共享该文件夹。打开文件夹属性对话框,选择共享页共享文件夹:
07.png

现在我们需要从Docker主机中连接这个共享的文件夹。首先通过SSH连接到Docker主机。通过输入如下命令很容易实现:
$ docker-machine ssh <your vm name>

08.png

然后,创建你共享目录相对应的Linxu目录,使用mount挂载上。
$ sudo mkdir –p <your path>
$ sudo mount –t cifs //192.168.137.1/Git /d/Git -o user=keesv,pass=<your password>,domain=<your domain>

上面命令当然需要替换为正确的IP(你Windows开发机器)、路径、用户名和密码。如果你使用的不是域账户,你可以去掉“,domain=<your domain>”部分。现在可以通过“ls /d/Git”检查下共享文件夹的内容是否可用:
09.png

你会注意到共享的驱动器在重启Docker虚拟主机后不再是连接状态。为了避免每次重新连接,我们可以使这个连接持久化。为了实现这个功能(还是在SSH连接下),创建可以在每次启动被调用的脚本
$ sudo touch /mnt/sda1/var/lib/boot2docker/bootlocal.sh

然后打开文件编辑(我这里使用vi, 由于它是默认自带的):
$ sudo vi /mnt/sda1/var/lib/boot2docker/bootlocal.sh

在vi中开始编辑,按“i"。然后输入如下(在相应地方替换为你自己的配置):
mkdir –p /d/Git
mount –t cifs //192.168.137.1/Git /d/Git -o user=keesv,pass=<your password>,domain=<your domain>

10.png

Ctrl + c退出vi,然后“:wq”回车保存。

重启虚拟机,SSH连接上,检查共享目录是否可用:
11.png

运行一个ASP.NET核心应用

为了看到所有组合到一起的样子,我们创建一个非常基本的ASP.NET核心应用,并在我们新建的Docker主机的容器中运行。

首先,创建应用。保证它是在你刚刚共享给Docker主机的目录中创建的。
12.jpg

13.jpg

然后使用Visual Studio Docker工具箱给工程添加Docker支持:
14.png

我们需要在我们运行的容器上指定Docker主机。这需要一个被docker-machine知道的主机。打开“Docker.props”文件,修改Docker 机器名字:
15.jpg

在修改后需要重启Visual Studio,所以立刻重启。当重新打开工程后,设置debug目标为Docker,按F5:
16.png

这将会在Docker主机中构建Docker镜像,然后运行基于镜像运行一个容器。一会儿后,网页就会弹出来:
17.png

注意Visual Studio调试是在容器内连接到你的应用上的,所以你可以设置断点,查看变量值和其他所有的方便Visual Studio优雅调试的便利功能。

容器化快乐!

原文链接:Using Docker tools for Visual Studio with a Hyper-V based Docker host(翻译:姜俊厚)

原文发布时间为:2016-07-02

本文作者:姜俊厚

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:在Hyper-V的Docker主机上使用Visual Studio Docker工具

相关文章
|
2月前
|
关系型数据库 MySQL Linux
事项驱动的项目管理工具Dectask的Docker安装教程
Dectask是智能驱动的新一代项目协作工具,本人介绍其Docker安装教程。
112 2
|
6月前
|
Prometheus 监控 Cloud Native
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
539 79
|
4月前
|
NoSQL Redis Docker
使用Docker Compose工具进行容器编排的教程
以上就是使用Docker Compose进行容器编排的基础操作。这能帮你更有效地在本地或者在服务器上部署和管理多容器应用。
457 11
|
5月前
|
前端开发 数据安全/隐私保护 计算机视觉
MAZANOKE:一款隐私优先的浏览器图像优化工具及Docker部署指南
MAZANOKE 是一款简易的图片优化工具,它直接在浏览器中运行,支持离线使用,并确保您的图片始终保留在设备上,绝不外泄。 这款专为普通人设计的工具,适合与亲友分享使用,是那些来路不明的"免费"在线工具的可靠替代品。
184 1
MAZANOKE:一款隐私优先的浏览器图像优化工具及Docker部署指南
|
5月前
|
存储 数据可视化 数据安全/隐私保护
【赵渝强老师】Docker的图形化管理工具
本文介绍了三种主流的Docker图形化管理工具:Docker UI、Portainer和Shipyard。Docker UI(现名UI for Docker)适合初学者,支持容器管理并可显示容器关系图;Portainer轻量级且功能全面,支持单机与集群管理;Shipyard专注于多主机集群管理,提供镜像、容器及节点管理功能,并包含engine和rethinkdb两个核心组件。文中还通过图文结合的方式展示了各工具的安装与使用方法。
278 4
【赵渝强老师】Docker的图形化管理工具
|
8月前
|
存储 开发工具 开发者
揭秘 Microsoft.Docker.SDK:让容器开发更轻松的强大工具揭秘
随着云计算和容器技术的快速发展,`Docker` 已经成为容器化技术的事实标准。`Microsoft` 作为 `Docker` 的主要支持者和参与者,推出了 `Microsoft.Docker.SDK`,旨在帮助开发者更轻松地进行容器开发。本文将深入揭秘 Microsoft.Docker.SDK 的功能、使用方法以及它在容器开发中的应用。
242 15
|
9月前
|
人工智能 文字识别 安全
Stirling-PDF:51.4K Star!用Docker部署私有PDF工作站,支持50多种PDF操作,从此告别在线工具
Stirling-PDF 是一款基于 Docker 的本地化 PDF 编辑工具,支持 50 多种 PDF 操作,包括合并、拆分、转换、压缩等,同时提供多语言支持和企业级功能,满足个人和企业用户的多样化需求。
803 6
Stirling-PDF:51.4K Star!用Docker部署私有PDF工作站,支持50多种PDF操作,从此告别在线工具
|
8月前
|
开发工具 虚拟化 git
自学软硬件第755 docker容器虚拟化技术youtube视频下载工具
docker容器虚拟化技术有什么用?怎么使用?TubeTube 项目使用youtube视频下载工具
|
11月前
|
存储 监控 C++
11 个必备 Docker 工具
11 个必备 Docker 工具
2438 11
11 个必备 Docker 工具
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
836 4
国产数据实战之docker部署MyWebSQL数据库管理工具