做为Docker容器集群管理三剑客之一的Docker Machine 大大简化了Docker主机部署的复杂度,极大的方便了开发者管理分布式Docker主机。
Docker Machine是一个简化安装Docker环境的工具。例如,在ubuntu安装一个docker环境要按照这个系统配置教程来装,哪天又换了CentOS系统,又要按照这个系统配置教程装。市场上主流Linux系统版本很多,每次安装岂不有些麻烦。使用Machine工具就简单很多,一两条命令即可在主流Linux系统上安装Docker环境,用户不用考虑什么操作系统。
另一方面,Machine还具备Docker工具管理什么虚拟化技术,Generic驱动默认管理LXC容器技术。
使用docker-machine
命令可以启动、检测、停止、重启一个被管理的虚拟主机,升级Docker客户端和守护进程和配置一个Docker客户端与你的主机对话。
将机器的CLI指向正在运行的被管理的主机,你就可以直接在该主机上运行docker命令了,如运行:docker-machine env default
表示机器的CLI指向了一个名为default
的虚拟主机,根据屏幕上的提示信息完成环境变量的配置,即可运行docker ps
、docker run hello-world
等等。
在Docker Machine发布之前,你可能会遇到以下问题:
你需要登录主机,按照主机及操作系统特有的安装以及配置步骤安装Docker,使其能运行Docker容器。
你需要研发一套工具管理多个Docker主机并监控其状态。
你在本地开发,产品部署在公有云平台,你希望能尽可能的减小两个环境的差异性
Docker Machine的出现解决了以上问题。
Docker Machine简化了部署的复杂度,无论是在本机的虚拟机上还是在公有云平台,只需要一条命令便可搭建好Docker主机
Docker Machine提供了多平台多Docker主机的集中管理
Docker Machine 使应用由本地迁移到云端变得简单,只需要修改一下环境变量即可和任意Docker主机通信部署应用。
综合来说Docker Machine让下图这种开发模式得到了大大的简化。
如果要使用virtualbox,首先要安装virtualbox
安装docker(docker engine)
$ curl -L https://github.com/docker/machine/releases/download/v0.10.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && chmod +x /tmp/docker-machine && sudo cp /tmp/docker-machine /usr/local/bin/docker-machine
pika:~$docker-machine -v #查看docker-machine版本,docker-machine version
docker-machine version 0.6.0, build e27fb87
错误:-bash: /usr/local/bin/docker-machine: Permission denied
chmod +x /usr/local/bin/docker-machine
可以在~/.bashrc中设置alias dm='docker-machine'简化输入
active
:显示出当前的活动主机;
config
:显示主机连接配置;
create
:创建一个主机;
env
:设置当前的环境是与哪个主机通信
inspect
:查看主机的详情信息;
ip
:查看主机IP地址;
kill
:强制关闭一个主机;
ls
:查看所有的主机信息;
provision
:重新配置现有主机;
regenerate-certs
:为主机重新生成证书;
restart
:重启一个主机;
rm
:删除一个主机;
ssh
:以ssh方式连接到主机上;
scp
:远程复制,用过Linux的应该都清楚
status
:查看主机状态;
stop
:停止一个正在运行的主机;
upgrade
:升级主机的Docker服务到最新版本;
url
:
version
:查Docker Machine版本;
help
:查看Docker Machine的帮助信息;
使用docker-machine 指令 --help
可以查看具体指令帮助信息。
docker-machine create -d virtualbox test01
也可以写成:
docker-machine create --driver virtualbox test01
创建一个名为test01
的主机,驱动方式为virtualbox
docker-machine start test01
C:\Users\zsl-pc>docker-machine start mytest
Starting "mytest"...
(mytest) Check network to re-create if needed...
(mytest) Waiting for an IP...
Machine "mytest" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
启动名为test01
的主机,根据提示需要设置环境
C:\Users\zsl-pc>docker-machine env mytest
SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.99.100:2376
SET DOCKER_CERT_PATH=C:\Users\zsl-pc\.docker\machine\machines\mytest
SET DOCKER_MACHINE_NAME=mytest
REM Run this command to configure your shell:
REM @FOR /f "tokens=*" %i IN ('docker-machine env mytest') DO @%i
根据提示还需要再进行下一步配置
@FOR /f "tokens=*" %i IN ('docker-machine env mytest') DO @%i
注意:在使用命令:docker-machine env mytest
时可能会出现以下提示:
C:\Users\zsl-pc>docker-machine env mytest
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates
for host "192.168.99.101:2376": dial tcp 192.168.99.101:2376: connectex: No connection could be made because the target
machine actively refused it.
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'.
Be advised that this will trigger a Docker daemon restart which will stop running containers.
当出现上述信息时需要重新生成证书信息。
C:\Users\zsl-pc>docker-machine regenerate-certs mytest
Regenerate TLS machine certs? Warning: this is irreversible. (y/n): y
Regenerating TLS certificates
Waiting for SSH to be available...
Detecting the provisioner...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
C:\Users\zsl-pc>docker-machine ip
192.168.99.100
C:\Users\zsl-pc>docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.102:2376 v1.12.3
mytest - virtualbox Running tcp://192.168.99.100:2376 v1.12.3
C:\Users\zsl-pc>docker-machine active
mytest
上述的这些指令是在docker-machine
使用相对较多实用性也很强的指令。其他的只用简单测试下便知晓其作用。