Docker Machine是一个docker管理工具,它解决了docker的两个问题:
- docker只能运行在Linux上
- docker只能管理运行本机的docker镜像。
本质上docker-machine是一个虚拟机管理工具,它通过创建一个安装好docker的虚拟机(支持VirtualBox,DigitalOcean,EC2等),并设置对应的环境变量(DOCKER_HOST,DOCKER_MACHINE_NAME等),使得本地的docker工具获得透明远程操作虚拟机的能力。从而使本身不支持docker的Windows和Mac系统能够直接使用docker命令。
docker-machine的安装可以通过docker-toolbox (支持Windows和Mac),如果是Mac电脑,推荐直接使用brew安装。
使用docker-machine创建一台虚拟机非常简单:
#创建一台名为vb的本地Virtualbox虚拟机
docker-machine create --driver virtualbox vb
#创建一台名为do的Digitalocean远程服务器
export DIGITALOCEAN_ACCESS_TOKEN=xxxxx #从digitalocean的管理面板获取的token
export DIGITALOCEAN_SIZE="512mb" #内存512mb,1gb类似
export DIGITALOCEAN_IMAGE="ubuntu-14-04-x64" #系统Ubuntu 14.04
export DIGITALOCEAN_REGION="sgp1" #区域新加坡
docker-machine create --driver digitalocean do
可通过docker-machine ls
查看当前所有的虚拟机,docker-machine ssh vb
可ssh到指定虚拟机,默认是一个精简的Linux系统。执行eval $(docker-machine env do)
后,设置相关环境变量指向名为do
的虚拟机,后续docker命令都会远程的在这台虚拟机上执行。如:这个时候执行docker images
列出的是Digitalocean远程服务器上的docker镜像。
详细使用方法参考官方文档。
这里主要想讲的是docker-machine对阿里云的支持。
docker-machine不支持直接创建阿里云ECS,虽然有第三方插件,但我只想用docker-machine远程安装管理docker的功能,创建和删除ECS还是在阿里云的控制台操作比较放心:)
搜索一下文档,发现官方虽然没有阿里云driver但有一个generic driver,可通过ssh管理现有的机器,原则上所有的Linux机器都支持。
但有一个问题,docker-machine的ssh功能只支持基于Public Key认证,而阿里云创建虚拟机的时候只支持通过密码登录,所以还需配置一下Public Key,如果是Mac电脑:
export ECS_IP=0.0.0.0 #阿里云控制台创建的ecs的ip地址
brew install ssh-copy-id
ssh-copy-id -i ~/.ssh/id_rsa.pub root@$ECS_IP
ssh root@$ECS_IP #测试是否不用输入密码就登录了
公钥认证搞定后,创建阿里云的docker-machine
export ECS_IP=0.0.0.0 #阿里云控制台创建的ecs的ip地址
docker-machine create --driver generic --generic-ip-address=$ECS_IP aliyun-machine
也可在创建的时候加上阿里云的docker加速器地址
export ECS_IP=0.0.0.0 #阿里云控制台创建的ecs的ip地址
export ALI_MIRROR=https://0i912uv5.mirror.aliyuncs.com #从dev.aliyun.com后台获取你的专属加速器,这个是假的并不能用
docker-machine create --engine-registry-mirror=$ALI_MIRROR --driver generic --generic-ip-address=$ECS_IP aliyun-machine
创建完成后,记得eval $(docker-machine env aliyun-machine)
一下,即可用本地的docker远程操作阿里云ECS上的docker镜像了。
最后,用docker-machine来玩玩这个微信机器人吧
http://dev.aliyun.com/detail.html?repoId=2859