Docker Machine 是Docker官方三剑客项目之一。
官网地址:https://docs.docker.com/machine/
负责使用docker容器的第一步:在多种平台上快速安装和维护docker运行环境。让用户可以在很短时间内在本地或云环境中搭建一套docker主机集群
Machine基本功能包括:
1:在指定节点或平台上安装Docker引擎,配置其为可使用的Dokcer环境
2:集中管理(包括启动,查看等)所安装的Docker环境。
安装Machine
base=https://github.com/docker/machine/releases/download/v0.16.0 && curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && sudo mv /tmp/docker-machine /usr/local/bin/docker-machine && chmod +x /usr/local/bin/docker-machine
验证安装是否成功,查看版本号
[root@server01 ~]# docker-machine -v docker-machine version 0.16.0, build 702c267f
安装命令自动补全脚本
运行以下脚本
#!/bin/ba/sh
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
会将下载好的脚本保存在/etc/bash_completion.d路径下
最后运行:source /etc/bash_completion.d/docker-machine-prompt.bash 使之生效
使用Machine
Machine连接不同类型的操作平台是通过对应驱动来实现的,目前已经集成了包括AWS,IBM,Google,以及OpenStack,VirtualBox,Vsphere等多种云平台的支持。
通过-d选项可以选择支持的驱动类型
实验一:本地主机
这种驱动适合主机操作系统和ssh服务都已经安装好了,需要对其安装doker引擎。
首先确保本地主机(安装了docker-machine)可以免密登录到目标主机。
过ssh-keygen命令生成密钥对,密钥类型为RSA
[root@server01 ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: 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:WGQJ1FeUzxmiZmjljcYQ5pBNEvZ7NBogykgYYgLkoto root@server01 The key's randomart image is: +---[RSA 2048]----+ |O= ..OB*o oo. | |Bo . o.X= o o . | |o.o =Bo+ + o | |o oo=O.. + | |. ..S+. | |.. . | |. E | | | | | +----[SHA256]-----+
将公钥传给目标主机:
[root@server01 ~]# ssh-copy-id root@192.168.1.7 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
验证免密登录
[root@server01 ~]# ssh root@192.168.1.7
Last login: Sun Mar 15 10:28:08 2020 from 192.168.1.103
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.7 netmask 255.255.255.0 broadcast 192.168.1.255
使用generic类型的驱动,注册一台docker主机,命名为wg01
确保192.168.1.7等访问外网!
[root@server01 ~]# docker-machine create -d generic --generic-ip-address=192.168.1.7 --generic-ssh-user=root wg01 Running pre-create checks... Creating machine... (wg01) No SSH key specified. Assuming an existing key at the default location. 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 wg01
列出所有管理的docker主机
[root@server01 ~]# docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS wg01 - generic Running tcp://192.168.1.7:2376 v19.03.8 [root@server01 ~]#
Machine命令
1 active 查看活动的Docker主机
激活状态意味着当前的DOCKER_HOST环境变量指向该主机
[root@server01 ~]# export DOCKER_HOST="tcp://192.168.1.7:2376" [root@server01 ~]# echo $DOCKER_HOST tcp://192.168.1.7:2376 [root@server01 ~]# docker-machine active wg01
2 config 输出连接的配置信息
ca证书,公钥,私钥 docker监听的地址
[root@server01 ~]# docker-machine config wg01 --tlsverify --tlscacert="/root/.docker/machine/machines/wg01/ca.pem" --tlscert="/root/.docker/machine/machines/wg01/cert.pem" --tlskey="/root/.docker/machine/machines/wg01/key.pem" -H=tcp://192.168.1.7:2376
3 create 创建一个docker主机
docker-machine create -d generic --generic-ip-address=192.168.1.7 --generic-ssh-user=root wg01
-d:驱动类型
--generic-ip-address:目标主机ip地址
--generic-ssh-user:目标主机授权登录用户
4 env 显示连接到某个主机需要的环境变量
[root@server01 ~]# docker-machine env wg01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.1.7:2376" export DOCKER_CERT_PATH="/root/.docker/machine/machines/wg01" export DOCKER_MACHINE_NAME="wg01" # Run this command to configure your shell: # eval $(docker-machine env wg01)
5 inspect 输出主机的详细信息
[root@server01 ~]# docker-machine inspect -f {{.Driver.IPAddress}} wg01
192.168.1.7
6 获取docker主机ip地址
[root@server01 ~]# docker-machine ip wg01 192.168.1.7
7 ls 列出所有管理的docker主机
192.168.1.7 [root@server01 ~]# docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS wg01 * generic Running tcp://192.168.1.7:2376 v19.03.8
8 url 获取主机的url
[root@server01 ~]# docker-machine url wg01 tcp://192.168.1.7:2376
9 rm 删除docker主机 (不演试了!)