Docker-Machine
- Docker-Machine是Docker官方编排(Orchestration)项目之一,负责在多种平台上快速安装Docker环境;
- Docker-Machine支持在常规Linux操作系统、虚拟化平台、openstack、公有云等不同环境下安装Docker host;
假如我们有100台主机,都需要配置Docker环境,如果我们一台一台去手工的安装,这是一件效率很低的事情,就像Linux中的PXE安装系统一样,我们应该有这种快速部署的方法,就是在一台主机上配置好相应的资源,然后让其他需要配置Docker环境的主机,来从这台主机上来获取资源,然后这台主机来进行控制,部署Docker环境,这样会大大的提高效率。这时候我们的Docker-Machine就可以大显身手了。
docker-machine active 显示当前的活动主机
docker-machine config 显示连接主机的配置
docker-machine create 创建一个主机
docker-machine env 设置当前的环境与哪个主机通信
docker-machine inspect 查看主机的详细信息
docker-machine ip 查看主机的IP
docker-machine kill 强制关闭一个主机
docker-machine ls 查看所有的主机信息
docker-machine provision 重新配置现在主机
docker-machine regenerate-certs 为主机重新生成证书
docker-machine restart 重启主机
docker-machine rm 删除主机
docker-machine ssh 以SSH的方式连接到主机上
docker-machine scp 远程复制
docker-machine status 查看主机的状态
docker-machine stop 停止一个正在运行的主机
docker-machine upgrade 升级主机的docker服务到最新版本
docker-machine version 查看docker-machine版本
虚拟机 | 配置 |
---|---|
server1 | 作为管理虚拟机,安装Docker-Machine,已经配置了Docker环境 |
server2 | 新安装的虚拟机,未配置Docker环境 |
classroom | 未配置Docker环境,提供第三方软件仓库 |
- 步骤一:在classroom上搭建第三方软件仓库
cd /var/www/html
mkdir docker
ls
createrepo -v /var/www/html/docker
cd /var/www/html
vim docker.repo
cat docker.repo
vim get-docker.sh #修改其中的yum源指向
192.168.43.250/docker #在浏览器中测试一下,能否访问到
192.168.43.250/get-docker.sh #在浏览器中测试一下,脚本能否访问到
- 步骤二:在server1上部署Docker-Machine,并且设置对server2的免密登录
cd /usr/local/bin
chmod +x docker-machine
docker-machine
ssh-keygen
ssh-copy-id server2 #设置免密登录server2
ssh root@192.168.43.102 -X #验证能否免密登录
-
步骤三:在server2上修改系统的版本改为centos,因为前面的脚本指定的如果系统版本是rhel就会退出,然后在server1上利用docker-machine对server2进行docker的部署
-
在server2上
vim /etc/os-release
cat /etc/os-release
- 在server1上
cat /etc/hosts #添加server2的IP和主机名
docker-machine create --driver generic --engine-install-url="http://192.168.43.250/get-docker.sh" --generic-ip-address=192.168.43.102 server2 #给server2部署docker环境
docker-machine ls
tree .docker/machine/
- 在server2上查看docker的状态,查看是否有docker-ce yum源
systemctl status docker
cd /etc/yum.repos.d/
ls
cd /etc/docker
ls
rpm -qa | grep docker
netstat -antlp
docker images
docker ps
- 步骤四:在server1上远程操作server2的docker服务
docker-machine config server2
docker `docker-machine config server2` ps
docker `docker-machine config server2` images
docker `docker-machine config server2` pull busybox
- 步骤五:利用docker-machine将server3也添加进来,然后可以在server1上进行切换对于server2和server3的远程操作
在server3上
vim /etc/os-release
cat /etc/os-release
在server1上设置对server3的免密登录
ssh-copy-id server3 #设置对server3的免密登录
docker-machine create --driver generic --engine-install-url="http://192.168.43.250/get-docker.sh" --generic-ip-address=192.168.43.103 server3
docker-machine ls
docker-machine env server3
docker-machine env server2
在server1上添加server2和server3的变量,使得可以直接在server1上切换到server2和server3的docker环境下进行操作
docker-machine env server3
docker-machine ls
eval $(docker-machine env server3)
docker-machine ls
docker images
eval $(docker-machine env server2) #切换为server2的docker环境
docker-machine ls
docker images
注意:我们这里在server1上添加的server2和server3的变量,只是docker部分的,也就是说只能操作server2和server3上的docker指令,其他命令均是在server1的环境下。
- 步骤六:在这里能够很明显的发现一个问题,那就是我们在步骤五中使用的方法,有时候容易混淆到底是server1的docker环境,还是server2或者server3的docker环境,接下来就使用另外一种方法,这种方法能够明显的看到当前到底是哪个主机的docker环境
在浏览器中输入地址https://github.com/docker/machine
然后点击contrib/completion,然后再点击bash,会发现有三个脚本;
将这三个脚本下载到server1的/etc/bash_completion.d目录下(注意:必须是这个目录)
cd /etc/bash_completion.d
wget https://github.com/docker/machine/blob/master/contrib/completion/bash/docker-machine-prompt.bash
wget https://github.com/docker/machine/blob/master/contrib/completion/bash/docker-machine-wrapper.bash
wget https://github.com/docker/machine/blob/master/contrib/completion/bash/docker-machine.bash
source /etc/bash_completion.d/docker-machine-prompt.bash #source一下,将设置在文件中的配置信息马上生效
source /etc/bash_completion.d/docker-machine-wrapper.bash
source /etc/bash_completion.d/docker-machine.bash
vim .bashrc #配置.bashrc配置文件,,系统就会自动读取的,不是用来执行的
source .bashrc
eval $(docker-machine env server2)