同骏 發表於 2017-6-27 07:11:00

用 Docker Machine 创建 Azure 虚拟主机

<p><span style="font-family: Microsoft YaHei; font-size: 15px">搭建环境向来是一个重复造轮子的过程,Docker Machine 则把用户搭建 Docker 环境的各种方案汇集在了一起。笔者在《Docker Machine 简介》一文中演示了使用 Docker Machine 在本地的 vSphere 主机中安装 Docker 环境。但是在云计算大爆炸的今天,真正让我们头疼的可能是五花八门的 IaaS 平台!这才是 Docker Machine 真正发挥威力的地方。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">Docker Machine 把与平台相关的部分封装到了不同的驱动中。只要为某个 IaaS 平台提供了驱动程序,Docker Machine 就能够支持该平台上的操作。像 Azure、AWS、GCE、DigitalOcean 等大的厂商早已被支持。本文将以 Azure 为例介绍使用 Docker Machine 在 IaaS 上创建并管理 Docker 虚拟主机。</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">如果您还不了解 Docker Machine ,请先移步笔者的前两篇文章补充相关知识:《Docker Machine 简介》、《Docker Machine 详解》。</span></p>
<h1><span style="font-family: Microsoft YaHei; font-size: 18pt">准备</span></h1>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">我们的目标是通过 Docker Machine 在 Azure 上面创建一台安装了 Docker 的虚拟主机。因为 Azure 上的所有资源都必须通过订阅账号才能授权使用,所以我们首先得准备一个 Azure 的订阅账号。国内的 Azure 一直在搞一元试用的活动,赶快去申请一个吧!</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">Azure 建议我们把资源通过 resource group 组织起来。为了演示方便,我们新创建一个名为 nickcontainer 的 resource group 存放将要创建的虚机:</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2015.cnblogs.com/blog/952033/201706/952033-20170625174932460-669616320.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">此时 resource group 中还没有任何内容。</span></p>
<h1><span style="font-family: Microsoft YaHei; font-size: 18pt">创建云端虚机</span></h1>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">使用 Docker Machine,一个 create 命令就能搞定:</span></p>
<div class="cnblogs_code">
<pre>docker-<span style="color: rgba(0, 0, 0, 1)">machine create \
    </span>--<span style="color: rgba(0, 0, 0, 1)">driver azure \
    </span>--azure-<span style="color: rgba(0, 0, 0, 1)">environment AzurePublicCloud \
    </span>--azure-subscription-<span style="color: rgba(0, 0, 255, 1)">id</span><span style="color: rgba(0, 0, 0, 1)"> xxxxxxxxxxxxxxxxxxxxxxxxxx \
    </span>--azure-location <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">East Asia</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> \
    </span>--azure-<span style="color: rgba(0, 0, 0, 1)">size Standard_A0 \
    </span>--azure-image canonical:UbuntuServer:<span style="color: rgba(128, 0, 128, 1)">16.04</span>.<span style="color: rgba(128, 0, 128, 1)">0</span>-<span style="color: rgba(0, 0, 0, 1)">LTS:latest \
    </span>--azure-<span style="color: rgba(0, 0, 255, 1)">ssh</span>-<span style="color: rgba(0, 0, 0, 1)">user nick \
    </span>--azure-resource-<span style="color: rgba(0, 0, 0, 1)">group nickcontainer \
    </span>--azure-availability-<span style="color: rgba(0, 0, 0, 1)">set testvmtiggeras \
    testvmtigger</span></pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">使用国内 Azure 的用户请把参数 --azure-environment AzurePublicCloud 修改为 --azure-environment <strong>AzureChinaCloud</strong>。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">执行上面的命令,首先会验证我们是否有权限访问 Azure 进行操作:</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2015.cnblogs.com/blog/952033/201706/952033-20170625173659601-1168980091.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">这时执行流程停住了,上图的输出中说的很明确,需要在浏览器中访问 https://aka.ms/devicelogin,然后输入一个验证码:</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2015.cnblogs.com/blog/952033/201706/952033-20170625173730976-1437032866.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">填入验证码并继续:</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2015.cnblogs.com/blog/952033/201706/952033-20170625173759210-1098724678.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">在此处输入你的订阅账号和密码就可以进完成身份验证了:</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2015.cnblogs.com/blog/952033/201706/952033-20170625173824554-909116271.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">此时身份认证过程已经完成,可以关掉浏览器了。回到刚才的命令行,发现又接着往下执行了。整个过程大概需要几分钟,直到输出下面的内容:</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2015.cnblogs.com/blog/952033/201706/952033-20170625173847226-1116727156.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">让我们看看虚机 testvmtigger 的状态:</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2015.cnblogs.com/blog/952033/201706/952033-20170625173909132-1260594371.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">已经处于 "Runing" 状态,连上 Docker daemon 试试:</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2015.cnblogs.com/blog/952033/201706/952033-20170625173951335-1438495667.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">可以看到服务器端的版本是 17.05.0-ce,远高于本地客户端的版本。</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">再让我们回到 Azure 的 portal 上,看看 resource group 中新创建了哪些内容:</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2015.cnblogs.com/blog/952033/201706/952033-20170625174027366-752887194.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">一看吓一跳,怎么这么多东西?其实玩过 Azure 虚机的同学都知道,当我们创建一台虚机的同时会创建这台虚机依赖的所有资源,比如存储、虚拟网络、网络安全组、可用性集合、网卡、公有IP地址等等。这里我们只关心两点(上图中的红框框)就足够了:第一,虚机被成功创建了;第二,所有资源的区域都在东亚。</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">经过一轮检查,我们可以确定 create 命令很好的完成了任务:在 Azure 上创建了虚机,并且安装了 Docker 环境。下面我们解释一下 create 命令中主要的几个参数。</span></p>
<h1><span style="font-family: Microsoft YaHei; font-size: 18pt">参数详解</span></h1>
<p><strong><span style="font-family: Microsoft YaHei; font-size: 15px">--driver azure</span></strong><br><span style="font-family: Microsoft YaHei; font-size: 15px">driver 参数告诉 Docker Machine 我们操作的对象在 Azure 云上,需要使用 Azure 相关的接口来进行操作。</span></p>
<p><strong><span style="font-family: Microsoft YaHei; font-size: 15px">--azure-environment AzurePublicCloud</span></strong><br><span style="font-family: Microsoft YaHei; font-size: 15px">其实存在多套相互独立的 Azure 云环境,比如国内的。所以需要用这个参数来指定具体的 Azure 云环境。默认值是 AzurePublicCloud,指向我们说的 Azure 国际版。连接国内版需要指定为 AzureChinaCloud。</span></p>
<p><strong><span style="font-family: Microsoft YaHei; font-size: 15px">--azure-subscription-id xxxxxxxxxxxxxxxxxxxxxxxxxx</span></strong><br><span style="font-family: Microsoft YaHei; font-size: 15px">这个是与你账号关联的订阅 ID,Azure 内部的操作都是依赖于这个 ID 的。</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><strong>--azure-location "East Asia"</strong> </span><br><span style="font-family: Microsoft YaHei; font-size: 15px">Azure 在全球各地部署了很多的数据中心,我们可以通过 location 指定创建的资源所在的位置。这个位置当然是越靠近用户越好,国内的国际版用户选择东亚稍微好一点。</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><strong>--azure-size Standard_A0</strong> </span><br><span style="font-family: Microsoft YaHei; font-size: 15px">Azuer 根据不同的 size(其实就是配置)对虚拟机进行收费,demo 中选择的 Standard_A0 大概是这个样子:</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2015.cnblogs.com/blog/952033/201706/952033-20170625174345007-45506148.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">虽然配置不高,但作为 demo 来说已经足够用了。MS 提供了非常丰富的 size 可供选择,如果你要创建生产环境的虚机实例,可能需要选择每个月几十到几百美金的实例。</span></p>
<p><strong><span style="font-family: Microsoft YaHei; font-size: 15px">--azure-image canonical:UbuntuServer:16.04.0-LTS:latest</span></strong><br><span style="font-family: Microsoft YaHei; font-size: 15px">对于生产环境来说,虚机的镜像是至关重要的。Demo 中使用了 ubuntu server 16.04 的镜像,当然我们可以在这里指定 Azure 支持的任何虚拟机镜像。这点可比只能使用 boot2docker 的驱动强多了!</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><strong>--azure-ssh-user nick</strong> </span><br><span style="font-family: Microsoft YaHei; font-size: 15px">可以通过 SSH 登录到虚拟机中的用户,让我们试一下:</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2015.cnblogs.com/blog/952033/201706/952033-20170625174435820-426278295.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">直接以用户 nick 登录成功了,其实 Docker Machine 已经为这个用户配置了通过秘钥登录的相关信息。</span></p>
<p><strong><span style="font-family: Microsoft YaHei; font-size: 15px">--azure-resource-group nickcontainer</span></strong><br><span style="font-family: Microsoft YaHei; font-size: 15px">新创建的资源所属的 resource group。 </span></p>
<h1><span style="font-family: Microsoft YaHei; font-size: 18pt">清除资源</span></h1>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">Docker Machine 不仅可以创建虚机,还可以管理虚机。所谓的管理,仅仅是能够 stop、start 和 restart 吗?答案是可以有更多的功能,但是需要相关驱动的支持。比如 rm 命令,对于 azure 驱动来说,它是可以把刚才创建那一坨东西几乎全部干掉的!执行下面的命令:</span></p>
<div class="cnblogs_code">
<pre>$ docker-machine <span style="color: rgba(0, 0, 255, 1)">rm</span> testvmtigger</pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">这是一个很危险的操作,所以会有一个确认执行的步骤,然后就真的把 Azure 上的资源给干掉了(除了存储部分):</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2015.cnblogs.com/blog/952033/201706/952033-20170625174545116-1042273681.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">虽然笔者觉得这真的是一个很强很酷的功能,但还是要警告自己和同学们:一定要慎用!</span></p>
<h1><span style="font-family: Microsoft YaHei; font-size: 18pt">总结</span></h1>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">云服务为我们打开了一扇新的大门,当然对运维人员来说也带来了诸多的挑战。如何选择对云端操作友好的工具就成了我们提升效率的重要途径。就 Docker 操作来说,Docker Machine 在这个方向上做了很好的尝试。真心的希望这个工具能够不断的完善,成为运维人员手中的一把利剑。</span></p>

</div>
<div id="MySignature" role="contentinfo">
    <div>作者:sparkdev</div>
<div>出处:http://www.cnblogs.com/sparkdev/</div>
<div>本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。</div><br><br>
来源:https://www.cnblogs.com/sparkdev/p/7077333.html
頁: [1]
查看完整版本: 用 Docker Machine 创建 Azure 虚拟主机