Docker machine(docker 多主机部署)

此文档为翻阅cloudman的每天5分钟玩转docker技术的读书笔记。

Docker machine概念

Docker machine:在一个multi-host的环境中,手动去将安装和配置docker非常繁琐,用户能够使用docker machine能够快速的安装docker环境并配置安全配置。
docker machine支持在不同的环境下安装配置docker host,同时还能对构建好的host进行一些简单的管理操作。
(1)常规linux操作系统
(2)虚拟化平台 :virtualbox、vmware、kvm、hyperV等
(3)公有云:aws、azure等

实际体验:可能因为网络原因,经常卡住不动,不如写shel脚本l、使用puppet、和ansible这些工具,可控程度高。

实验环境
3个host

安装 docker machine

1
2
3
4
curl -L https://github.com/docker/machine/releases/download/v0.13.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

执行docker-machine –version验证安装

安装 bash completion script,这样在 docker-manchine 管理对应的host时,命令提示符会变成对应host的name

cd /etc/bash_completion.d
执行以下命令

1
scripts=( docker-machine-prompt.bash docker-machine-wrapper.bash docker-machine.bash ); for i in "${scripts[@]}"; do sudo wget https://raw.githubusercontent.com/docker/machine/v0.13.0/contrib/completion/bash/${i} -P /etc/bash_completion.d; done

修改bashrc
vim ~/.bashrc

1
2
source /etc/bash_completion.d/docker-machine-prompt.bash
PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '

创建machine
创建machine就是在host上自动安装和配置docker
docker-machine ls #显示当前通过docker-machine创建的host

创建前需要进行互信操作,实现免密码登录,docker-machine生成公钥

1
2
ssh-copy-id root@192.168.111.162
ssh-copy-id root@192.168.111.163

开始创建

执行

1
docker-machine create --driver generic --generic-ip-address=192.168.111.162 container-1

卡住的话 docker-machine rm xxx 然后做试几次create

1
2
3
--driver 调用哪个driver,使用普通Linux就写generic ,
--generic-ip-address 指定目标系统的ip
container-1表示命名为contaner-1

添加container-2

1
2
docker-machine create --driver generic --generic-ip-address=192.168.111.163 container-2

执行过程

1、通过ssh登录到远程主机
2、安装docker
3、复制证书
4、配置docker-daemon
5、启动docker

docker-machine ls 可以看见已经安装好的docker host了

docker-machine 执行的步奏

docker-machine creat会做两步操作。
关于docker-machine做的安全配置参考http://www.cnblogs.com/sparkdev/p/7066789.html
1,安装docker,并进行配置。
2,生成证书保证docker服务安全。
我们手动按装的docker,docker daemon监听tcp端口,但没有做任何安全限制,也就是任何人想连都可以连接进来。使用docker-machine create创建的docker默认是做的tls证书加密验证的,只有安装了特定证书的client才能与docker-daemon交互。

/etc/systemd/system/docker.service.d/10-machine.conf

在 Docker daemon 的配置文件中看到四个以 –tls 开头的参数,分别是 –tlsverify、–tlscacert、–tlscert和 –tlskey。其中的 –tlsverify 告诉 Docker daemon 需要通过 TLS 来验证远程客户端。其它三个参数分别指定了一个 pem 格式文件的路径,按照它们指定的文件路径去查看一下:

回到安装docker-machine的机器上ls /root/.docker/machine/machines/container-1/ 和docker-daemon上的是一样的

Docker Machine 在执行 create 命令的过程中,生成了一系列保证安全性的秘钥和数字证书*.pem文件。这些文件在本地和远程 Docker 主机上各存一份,本地的用于配置 Docker 客户端,远程主机上的用于配置 Docker daemon,让两边都设置 TLS 验证的标记,依此实现安全的通信。

管理machine

显示container-1的环境变量

执行

1
eval $(docker-machine env container-1)

可以发现命令提示符发生了改变,因为我们前面在bashrc配置了
在此状态下执行所有的docker命令都相当于在container-1上执行

切换到container-2
eval $(docker-machine env container-2)

docker-machine 命令

upgrad :更新machine的docker到最新版本 docker-machine upgrade container-1 container-2
config:查看machine的docker daemon配置
stop/restart/restart :对host操作系统进行操作
scp:可以在不同machine中scp文件。

http://www.cnblogs.com/sparkdev/p/7066789.html
http://www.cnblogs.com/CloudMan6/p/7237420.html