Shan

Docker Machine实现多主机管理
一、环境说明 虚拟环境:VMware Workstation 14 Pro 系统环境:CentOS7.5 主机地址...
扫描右侧二维码阅读全文
25
2018/10

Docker Machine实现多主机管理

一、环境说明

虚拟环境:VMware Workstation 14 Pro
系统环境:CentOS7.5
主机地址:machine 192.168.5.128
host1 192.168.5.129
host2 192.168.5.130
注:所有操作都是在machine这台机器上操作的

二、安装Docker Machine

Linux:

# base=https://github.com/docker/machine/releases/download/v0.16.0 &&
    curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
    sudo install /tmp/docker-machine /usr/bin/docker-machine

MacOS:

# base=https://github.com/docker/machine/releases/download/v0.16.0 &&
    curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/usr/local/bin/docker-machine &&
    chmod +x /usr/local/bin/docker-machine

验证版本

# docker-machine version
docker-machine version 0.16.0, build 9371605

三、安装docker

卸载旧版本

# yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

安装依赖包

# yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2

设置仓库

# yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

安装docker-ce

yum install docker-ce docker-ce-cli containerd.io

四、安装bash completion scripts

它可以实现按tab键补全子命令和部分参数,能够有更好的操作体验。

编辑脚本文件
# vim bash_completion.sh
将下面内容粘贴到bash_completion.sh里面
...
#!/bin/bash
base=https://raw.githubusercontent.com/docker/machine/v0.16.0
for i in docker-machine-prompt.bash docker-machine-wrapper.bash docker-machine.bash
do
  sudo wget "$base/contrib/completion/bash/${i}" -P /etc/bash_completion.d
done
...
执行脚本
# bash bash_completion.sh

五、设置环境变量

# vim ~/.bashrc

将下面两行内容添加到文件末尾
source /etc/bash_completion.d/docker-machine-prompt.bash
PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '

# source ~/.bashrc

它的作用是设置docker-machine的命令行提示符,但是目前看不出效果,需要部署完其他两个host才行。

六、设置ssh免密登录

生成密钥对
# ssh-keygen -t rsa -N ''
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:7nDfDXGox0eH+thmOJeOtzYYlK6ipCCLMQhvZXqBk0c root@host2
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|    E        .   |
|   +        o. . |
|. + =   S  oo + .|
|o. * . .   oo= . |
|= = . o o ..=+.. |
|.* o o +...o+OO  |
|o   . ..... +O*o |
+----[SHA256]-----+

# ssh-copy-id host1
# ssh-copy-id host2

七、创建host

# docker-machine create --driver generic --generic-ip-address=192.168.5.129 host1
# docker-machine create --driver generic --generic-ip-address=192.168.5.130 host2
注:创建过程需要一段时间,耐心等待。

查看当前的host
# docker-machine ls
NAME    ACTIVE   DRIVER    STATE     URL                        SWARM   DOCKER     ERRORS
host1   -        generic   Running   tcp://192.168.5.129:2376           v18.09.2   
host2   -        generic   Running   tcp://192.168.5.130:2376           v18.09.2  

八、管理Machine

使用docker-machine管理其他主机,不需要再像docker一样使用-H参数来指定目标主机的地址

# docker-machine env host1
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.5.129:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/host1"
export DOCKER_MACHINE_NAME="host1"
# Run this command to configure your shell: 
# eval $(docker-machine env host1)

能显示出访问host1主机所需的所有环境变量,按照提示来执行eval $(docker-machine env host1)

# eval $(docker-machine env host1)
[root@machine ~ [host1]]# 

然后命令行提示符就已经变了,就是因为之前配置的.bashrc文件中的PS1。此时执行所有的docker命令,都相当于再host1主机上执行。

总结

Docker Machine与Docker swarm和K8S相比并没有编排容器的功能,只能来配置和管理多个docker宿主机,所以目前来说用的不是很多,了解为主就好。大型容器集群管理及批量编排还是要看Kubernetes的。
下一步准备通过不同的解决方案来实现容器间跨主机的网络联通。包括docker原生的overlay、CoreOS开发的flannel以及Calico等工具。

Last modification:February 13th, 2019 at 09:51 am

Leave a Comment