docker容器技术学习笔记(8、Docker Machine)
管理多个docker host主机
用 Docker Machine 可以批量安装和配置 docker host,这个 host 可以是本地的虚拟机、物理机,也可以是公有云中的云主机。
Docker Machine 支持在不同的环境下安装配置 docker host,包括:
1、常规 Linux 操作系统
2、虚拟化平台 - VirtualBox、VMWare、Hyper-V
3、OpenStack
4、公有云 - Amazon Web Services、Microsoft Azure、Google Compute Engine、Digital Ocean 等
Docker Machine 为这些环境起了一个统一的名字:provider。对于某个特定的 provider,Docker Machine 使用相应的 driver 安装和配置 docker host,如下图所示:
实验环境
- 操作系统:ubuntu
- ip:10.10.8.125、10.10.8.126、10.10.8.127
- 10.10.8.125 上安装 Docker Machine,然后通过 docker-machine 命令在其他两个 host 上部署 docker。
安装 Docker Machine
curl -L https://github.com/docker/machine/releases/download/v0.9.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
创建 Machine
“创建 Machine” 指的就是在 host 上安装和部署 docker。
创建 machine 要求能够无密码登录远程主机,所以需要先通过如下命令将 ssh key 拷贝到10.10.8.126。
执行 docker-machine create 命令创建 host1:
docker-machine create --driver generic --generic-ip-address=10.10.8.126 host1
因为我们是往普通的 Linux 中部署 docker,所以使用 `generic` driver,其他 driver 可以参考文档 https://docs.docker.com/machine/drivers/。
--generic-ip-address 指定目标系统的 IP,并命名为 host1
执行 docker-machine ls可以看到host1。使用同样的方法创建 host2:
docker-machine create --driver generic --generic-ip-address=10.10.8.107 host2
创建成功后 docker-machine ls 可以看到 host1 和 host2 都已经就绪:
# docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
host1 - generic Running tcp://10.10.8.126:2376 v18.06.1-ce
host2 - generic Running tcp://10.10.8.127:2376 v18.06.1-ce
管理machine
用 docker-machine 创建 machine 的过程很简洁,非常适合多主机环境。除此之外,Docker Machine 也提供了一些子命令方便对 machine 进行管理。其中最常用的就是无需登录到 machine 就能执行 docker 相关操作。
执行远程 docker 命令我们需要通过 -H 指定目标主机的连接字符串,比如:
docker -H tcp://10.10.8.126:2376 ps
Docker Machine 则让这个过程更简单。docker-machine env host1显示访问 host1 需要的所有环境变量。
根据提示,执行 eval $(docker-machine env host1)可以切换到host1
个有用的 docker-machine 子命令:
docker-machine upgrade 更新 machine 的 docker 到最新版本,可以批量执行;
docker-machine config 查看 machine 的 docker daemon 配置;
stop/start/restart 是对 machine 的操作系统操作,而 不是 stop/start/restart docker daemon。
docker-machine scp 可以在不同 machine 之间拷贝文件。