注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

郁夫的博客

我爱你们,只是你们不知道!

 
 
 

日志

 
 
 
 

docker-machine  

2015-12-02 09:27:45|  分类: Docker |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

现如今,不同云平台上安装docker的流程都不一样,这样对于用户部署docker主机就非常复杂。为了解决这一问题,出现了machine项目 (https://github.com/docker/machine),通过docker-machine可以在不同平台上(例如Azure、 Rackspace、Openstack、Google等云平台)创建docker主机。

是什么?

Machine是一个简化docker安装的命令行工具,其可以在不同平台上创建包含docker的实例。

docker-machine创建docker主机的过程:

(1)调用create命令可创建一个docker主机

$ docker-machine create --driver virtualbox dev
INFO[0000] Creating SSH key...
INFO[0000] Creating VirtualBox VM...
INFO[0007] Starting VirtualBox VM...
INFO[0007] Waiting for VM to start...
INFO[0038] "dev" has been created and is now the active machine
INFO[0038] To connect: docker $(docker-machine config dev) ps

说明:在virtualbox创建一个docker虚拟机,也可以指定别的driver

(2)通过ls命令可查看当前已安装的主机

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL
dev       *        virtualbox   Running   tcp://192.168.99.100:2376

(3)可以通过docker-machine config dev查看docker client连接信息

$ docker-machine config dev
  --tls --tlscacert=/Users/ehazlett/.docker/machines/dev/ca.pem 
  --tlscert=/Users/ehazlett/.docker/machines/dev/cert.pem 
  --tlskey=/Users/ehazlett/.docker/machines/dev/key.pem 
  -H tcp://192.168.99.103:2376

通过此命令可以构造docker相关命令,例如:

$ docker $(docker-machine config dev) run busybox echo hello world

(4)其他命令:

info(查看信息) stop(停止主机) kill(强制停止) start(启用主机)

restart(重启主机) rm(删除主机) ssh(登陆主机) url(获取docker的url) upgrade(升级docker)

Docker Machine的出现解决了以上问题。

  •     Docker Machine简化了部署的复杂度,无论是在本机的虚拟机上还是在公有云平台,只需要一条命令便可搭建好Docker主机
  •     Docker Machine提供了多平台多Docker主机的集中管理
  •     Docker Machine 使应用由本地迁移到云端变得简单,只需要修改一下环境变量即可和任意Docker主机通信部署应用。


综合来说Docker Machine让下图这种开发模式得到了大大的简化。

docker-machine - 郁夫 - 郁夫的博客

Docker Machine的安装

可以通过下载二进制可执行文件的方式安装Docker Machine,本文以Linux系统为例。

docker-machine - 郁夫 - 郁夫的博客

Docker Machine的运行原理

本文通过两个例子讲述了Docker Machine的工作原理及工作流程:在本机安装Virtualbox虚拟机作为Docker主机,以及在AWS创建Docker主机。

create命令用来创建docker主机,运行create命令需要指明驱动的名称,目前支持在本机运行virtualbox虚拟主机,Hyper-V虚拟主机,VMware虚拟主机,AWS EC2,Azure,DigitalOcean,Google等公有云主机,以及使用Openstack搭建的私有数据中心。

新的虚拟化(Xen,KVM)支持以及新的云平台支持可以通过开发驱动的方式支持。

在本机安装Virtualbox虚拟机作为Docker主机

docker-machine - 郁夫 - 郁夫的博客

Create Docker Machine主要包括三个Create过程。首先是Provider Create(libmachine/provider.go),此函数主要是在当前运行docker-machine命令主机上创建以machine name命名的文件夹,并将根证书,服务器证书以及用户证书拷贝到此文件夹。其次是driver create(例如drivers/virtualbox/virtualbox.go)用来创建主机,最后是运行host create(libmachine/host.go)通过SSH安装并配置Docker。目前在本地环境中使用的是boot2docker镜像,云端环境使用的是Ubuntu镜像。

运行在Virtualbox虚拟主机上的docker machine创建过程如下。

1. Docker Machine首先生成一个自签名的Root CA,然后用这个Root CA签发客户端证书,此证书在Docker客户端连接远程Docker服务器的时候做认证使用;

2. 配置Docker主机的运行参数,参数包括Docker客户端与远程Docker服务器之间认证参数,远程Docker daemon的运行参数以及Docker Swarm的参数。

docker-machine - 郁夫 - 郁夫的博客

3.  Docker Machine使用boot2docker作为virtualbox的镜像 – boot2docker是一个运行Docker容器的轻量级Linux系统,完全在内存中运行。

4.  创建virtualbox虚拟机

a.    生成ssh key – 部署过程中使用次ssh key认证实现远程操作

b.    创建一个VMDK文件作为虚拟机的hdd,大小可以在运行时指定参数–virtualbox-disk-size控制

docker-machine - 郁夫 - 郁夫的博客

c.    创建虚拟机

docker-machine - 郁夫 - 郁夫的博客

修改虚拟机参数,可通过参数–virtualbox-memory和–virtualbox-cpu-count控制内存大小和CPU个数。

docker-machine - 郁夫 - 郁夫的博客

d.    配置虚拟机网络 – NIC1为NAT形式使虚拟机能够访问外网,NIC2为hostonly模式用于内部通信,子网可以通过参数–virtualbox-hostonly-cidr修改

docker-machine - 郁夫 - 郁夫的博客

e.    配置存储 – 将boot2docker iso文件挂载在虚拟dvd光驱,步骤b中创建的文件作为hdd

5.    启动虚拟机,并设置端口映射,将本地随机端口转发到虚拟机22端口(此时还不知道虚拟机Hostonly网卡的IP地址,所以只能通过NAT网卡进行端口映射的方法访问虚拟机)

6.    使用默认用户名docker,默认密码docker登录虚拟机将第一步生成的ssh key导入到虚拟机/home/docker/.ssh/authorized_keys。获取hostonly网卡的IP地址(通过DHCP获得)

7.    部署虚拟机的Docker运行环境(所有命令都是通过SSH远程执行)

a.    配置虚拟机hostname

b.    安装Docker

c.    配置docker daemon使用TLS –tlsverify。使用此选项之后docker daemon只接受来自第1步中自签名的根证书签发的证书,docker客户端只相信第1步中自签名的更证书签发的服务器证书

d.    签发服务器证书

自此为止一个基于virtualbox的Docker运行环境就创建好了,使用者需要将本地的docker客户端配置到远程的docker daemon。

docker-machine - 郁夫 - 郁夫的博客

Docker Machine的其他命令都是通过drivers/virtualbox/virtualbox.go驱动实现的,在此就不累述了。

  评论这张
 
阅读(287)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017