Machine项目是Docker官方的开源项目,负责实现对Docker运行环境进行安装和管理,特别在管理多个Docker环境时,使用Machine要比手动管理高效得多。
Machine的定位是“在本地或者云环境中创建Docker主机”。
获取安装包
wget https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-linux-x86_64
将此文件赋予可执行权限
chmod a+x docker-machine-linux-x86_64
创建软链接到/usr/sbin下
ln -s /root/dockerlab/machine/docker-machine-linux-x86_64 /usr/sbin/docker-machine
这样,我们就可以不管在任何路径下,都可以执行docker-machine命令了。
首先确保本地主机和目标主机网络互通,并且本地主机可以免密登入到目标主机。
实验环境:
本地主机:192.168.0.197(就是安装了machine的那台主机)
目标主机1:192.168.0.198
目标主机2:192.168.0.199
step1:在本地主机上生成ssh密钥对,并将公钥复制到目标主机
ssh-keygen
这边所有的选项都不管,直接打回车就可以。
ssh-copy-id
这边执行过程中会让你输入目标主机的用户密码(我们这边使用root用户)
这样,我们就可以在本地主机上免密码登入到目标主机了。
这里不用输入密码了。
Step2 在目标主机上放通2376/tcp端口
firewall-cmd --add-port=2376/tcp –permanent
firewall-cmd --add-port=2376/tcp
step3部署目标主机
docker-machine create -d generic --generic-ip-address=192.168.0.198 --generic-ssh-user=root machine198
命令注解:
create:创建一个docker主机
-d:驱动类型(generic|virtualbox)
Generic:普通类型(通过SSH创建主机)
Virtualbox:启动一个virtualbox虚拟机,并部署docker
--generic-ip-adddress=:目标主机的ip
--generic-ssh-user=:目标主机的用户名
到目标主机上去看,发现docker 服务已经起来了。
注意红框中的内容,目标主机上的docker已开启了2376+tls,我们可以通过tls远程访问(详见5.6.1小节)
1)docker –machine ls #列出所有docker主机
这两台主机就是我们刚刚用docker-machine create创建的两台主机
2)docker-machine active #列出处于active的docker主机
激活状态意味着当前的DOCKER_HOST环境变量指向该主机。
目前还没有主机处于active状态
我们将machine198激活,实际上就是将docker-machine的一些环境变量设成machine198的内容
eval "$(docker-machine env machine198)"
可以看到,machine198已经处于active状态
这时候我们在docker-machine这台主机上操作docker,就相当于是在machine198这台主机的操作。
我们来验证一下:
我们在197(安装docker-machine)的主机上拉取一个busybox的镜像
然后到machine198这台主机上去看一下
发现是一样的。
docker-machine config machine198
注意红框内的提示,意思是用eval "$(docker-machine env machine198)"这个命令来配置你的shell,就是我们上面第二部分,讲docker-machine active时候用的这个命令。
这个命令相当于是执行了以下几条命令:
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.0.198:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/machine198"
export DOCKER_MACHINE_NAME="machine198"
这个eval,相当于是把docker-machine env machine198这条命令获取的输出,转换成了命令。
这时候,我们看一下环境变量:
环境变量都已成变成machine198的参数了,把我们执行docker命令就相当是在machine198那台主机上执行是一样的。
6)docker-machine inpect
7)docker-machine ip
8)docker-machine kill
Genric模式不支持,只有在虚拟模式下才支持此功能。
9)docker-machine restart
相当于执行了一下shutdown –r now这个命令
10)docker-machine ssh
11)docker-machine status
12)docker -H
这个功能和5.6.1小节中介绍的TLS方式docker远程管理,是一样的。