date: 2020-03-29title: docker-machine #标题
tags: docker-machine #标签
categories: docker # 分类
docker-machine是docker官方推出的一个快速部署docker主机的工具,今天闲来无事,尝试下这个工具。
个人感觉这个工具有些鸡肋,毕竟如果我们需要部署docker环境,用ansible也可以实现快速部署多台docker环境。不过,官方的东西,还是了解一下吧。
环境准备
OS | 主机名 | IP |
---|---|---|
Centos 7.5 | docker01 | 192.168.20.6 |
Centos 7.5 | docker02 | 192.168.20.7 |
Centos 7.5 | docker03 | 192.168.20.8 |
注:以上所有主机均无docker环境。
配置防火墙及iptables
该操作需要在所有节点上执行。
# 开放防火墙端口,放行相关流量
[root@docker01 ~]# firewall-cmd --permanent --add-port=2376/tcp
[root@docker01 ~]# firewall-cmd --reload
# 清空iptables规则并保存
[root@docker01 ~]# iptables -F
[root@docker01 ~]# iptables-save
接下来的所有操作,如无特殊说明,只需在docker01主机上配置。
下载docker-machine指令
docker-machine托管在github上,github搜索“docker/machine”即可,docker-machine指令下载链接
[root@docker01 ~]# curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-`uname -s`-`uname -m` >/usr/local/bin/docker-machine && chmod +x /usr/local/bin/docker-machine
[root@docker01 ~]# docker-machine -v # 确定docker-machine命令可以使用
docker-machine version 0.16.2, build bd45ab13
配置域名解析
[root@docker01 ~]# cat >> /etc/hosts << EOF
> 192.168.20.6 docker01
> 192.168.20.7 docker02
> 192.168.20.8 docker03
> EOF
配置docker01可以免密登录docker02、docker03
[root@docker01 ~]# ssh-keygen -t rsa # 生成密钥对
# 将密钥发送到其他节点(包括自己本机)
[root@docker01 ~]# ssh-copy-id root@docker01
[root@docker01 ~]# ssh-copy-id root@docker02
[root@docker01 ~]# ssh-copy-id root@docker03
将配置好的hosts文件发送到其他节点
[root@docker01 ~]# scp /etc/hosts root@docker02:/etc/
hosts 100% 233 0.2KB/s 00:00
[root@docker01 ~]# scp /etc/hosts root@docker03:/etc/
hosts 100% 233 0.2KB/s 00:00
创建第一个docker主机
# 要为某个主机配置docker环境,则用下面的指令,指定主机的IP即可。
[root@docker01 ~]# docker-machine create --driver generic --generic-ip-address=192.168.20.6 --generic-ssh-key ~/.ssh/id_rsa docker01
# 在192.168.20.6(本机)上安装docker环境,其中generic表示在该平台创建docker环境所使用的驱动,如果在其他平台,如vsphere,则需要更改相应的驱动。
Running pre-create checks... # 配置docker环境的时间稍微长了些
Creating machine...
(docker01) Importing SSH key...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with centos...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env docker01
[root@docker01 ~]# docker-machine ls | grep docker01 # 查看相应的docker主机信息
docker01 - generic Running tcp://192.168.20.6:2376 v19.03.8
将其他节点也配置docker环境
# 配置docker02主机
[root@docker01 ~]# docker-machine create --driver generic --generic-ip-address=192.168.20.7 --generic-ssh-key ~/.ssh/id_rsa docker03
# 配置docker03主机
[root@docker01 ~]# docker-machine create --driver generic --generic-ip-address=192.168.20.8 --generic-ssh-key ~/.ssh/id_rsa docker03
优化docker-machine的shell
参考官方文档,如下:
按照官方提示进行以下操作:
[root@docker01 ~]# cat /usr/local/etc/bash_completion.d # 写入以下内容
base=https://raw.githubusercontent.com/docker/machine/v0.16.2 # 注意这里改为docker-machine对应的版本
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
[root@docker01 ~]# source /usr/local/etc/bash_completion.d # 执行脚本后会下载三个文件
[root@docker01 ~]# source /etc/bash_completion.d/docker-machine-prompt.bash # 执行该指令
[root@docker01 ~]# tail -1 ~/.bashrc # 当前用户的变量文件最后一行写入下面内容
PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '
[root@docker01 ~]# source ~/.bashrc # 重新加载文件
使用优化后的shell
# 可以看到命令提示符已经发生了变化,可以在docker-machine上登录到任意docker主机上。
[root@docker01 ~ [docker01]]# docker-machine env docker01 # 查看docker01主机的信息
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.20.7:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/docker02"
export DOCKER_MACHINE_NAME="docker02"
# Run this command to configure your shell:
# eval $(docker-machine env docker02) # 执行该指令就可以登录到docker02节点上,如下:
[root@docker01 ~ [docker01]]# eval $(docker-machine env docker02) # 执行指令后,会发现命令提示符已经变为ledocker02
[root@docker01 ~ [docker02]]#
docker环境的热升级
在没有docker-machine的情况下,若需要升级docker版本,则还需要停止docker环境,卸载老版本、安装新版本….. 比较麻烦,有docker-machine的话,如果以后需要升级docker环境,只需要一条指令即可解决,如下:
[root@docker01 ~]# docker-machine upgrade docker01 docker02 docker03
docker-machine日常维护指令
1、列出可用docker主机
[root@docker01 ~]# docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
docker01 - generic Running tcp://192.168.20.6:2376 v19.03.8
docker02 - generic Running tcp://192.168.20.7:2376 v19.03.8
docker03 - generic Running tcp://192.168.20.8:2376 v19.03.8
2、创建docker主机
# --driver:指定用来创建机器的驱动类型,其他驱动类型请自行百度
[root@docker01 ~]# docker-machine create --driver generic --generic-ip-address=192.168.20.7 --generic-ssh-key ~/.ssh/id_rsa docker03
3、查看docker主机的IP信息
[root@docker01 ~]# docker-machine ip docker03
192.168.20.8
[root@docker01 ~]# docker-machine ip docker02
192.168.20.7
docker-machine命令参数说明
- config:查看当前激活状态 Docker 主机的连接信息。
- creat:创建 Docker 主机
- env:显示连接到某个主机需要的环境变量
- inspect: 以 json 格式输出指定Docker的详细信息
- ip: 获取指定
- Docker 主机的地址
- kill: 直接杀死指定的 Docker 主机
- ls: 列出所有的管理主机
- provision:重新配置指定主机
- regenerate-certs: 为某个主机重新生成 TLS 信息
- restart: 重启指定的主机
- rm: 删除某台Docker 主机,对应的虚拟机也会被删除
- ssh: 通过 SSH 连接到主机上,执行命令
- scp: 在 Docker 主机之间以及Docker 主机和本地主机之间通过 scp 远程复制数据
- mount: 使用 SSHFS 从计算机装载或卸载目录
- start:启动一个指定的 Docker 主机,如果对象是个虚拟机,该虚拟机将被启动(有些驱动不支持这个选项,如:generic驱动)
- status: 获取指定Docker主机的状态(包括:Running、Paused、Saved、Stopped、Stopping、Starting、Error)等
- stop:停止一个指定的 Docker 主机 (同样,有些驱动不支持此选项)
- upgrade: 将一个指定主机的 Docker 版本更新为最新
- url: 获取指定 Docker主机的监听 URL
- version: 显示 Docker Machine 的版本或者主机 Docker 版本