14、熟悉Docker-Machine
Docker Machine是Docker官方提供的一个远程管理工具。通过使用Docker Machine,可以帮助开发人员在远程主机上安装Docker;或者在远程的虚拟主机上直接安装虚拟机并在虚拟机中安装Docker。Docker Machine还提供了相应的命令来管理这些远程的Docker环境和虚拟机。
注:在最新版的docker中已经弃用 Docker Machine工具了,使用的场景应该是比较少的在生产中。这里简单学习了解一下即可。
下图是官方提供的一张关于Docker Machine的图片,很形象地说明了Docker Machine的功能。

官网:https://docs.docker.com/machine/
下载地址: https://github.com/docker-archive-public/docker.machine/releases
环境:
主机名 |
IP地址 |
已部署的服务 |
node1 |
192.168.1.210 |
docker、docker Machine |
node2 |
192.168.1.211 |
docker |
|
|
|
一、安装
1 2 3 4 5 6
|
curl -L https://gh-proxy.com/github.com/docker-archive-public/docker.machine/releases/download/v0.16.2/docker-machine-Linux-x86_64 > /usr/local/bin/docker-machine && chmod +x /usr/local/bin/docker-machine
docker-machine -v
|
二、配置免密登陆
由于Docker Machine在进行远程管理的时候,需要免密码登录的支持。因此在使用“docker-machine”命令之前,需要先配置主机之间的免密码登录,然后才能使用Docker Machine。
1 2 3 4 5 6 7
| # node1节点执行 ssh-keygen -t rsa ssh-copy-id root@192.168.1.211
# node2节点执行 ssh-keygen -t rsa ssh-copy-id root@192.168.1.210
|
三、使用docker-machine
使用“docker-machine”在远程主机上安装Docker
在配置好了node1节点与node2节点之间的免密码登录后,便可以在master节点上使用“docker-machine”命令在node2上远程安装Docker。执行下面的步骤:
(1)在master节点上,执行下面的命令
1 2 3 4 5 6 7
| docker-machine create \ -d generic \ --generic-ip-address=192.168.1.211 \ --generic-ssh-user=root \ --generic-ssh-key /root/.ssh/id_rsa node2
# 提示:这条命令将会执行很长的时间。
|
1
| # 如果在这里遇到报错Error creating machine: Error running provisioning: error installing docker:,先去检查之前让修改的都没有问题之后,再试,如果还是不行,除了docker-machine这台主机,其他两台换为已经安装docker的主机,因为在create的过程中,是通过国外的网站去下载的,网络原因,会下载到一半停止,继续运行create后面的步骤,所以会报这个错误,提前将docker安装好就不会这样了
|
其中的参数:
- -d:表示使用的驱动类型,官方支持的驱动有:amazonec2、azure、digitalocean、exoscale、generic、google、hyperv、none、openstack、rackspace、softlayer、virtualbox、vmwarevcloudair、vmwarefusion、vmwarevsphere。
- –generic-ip-address:远端主机的IP地址。
- –generic-ssh-user:远程登录的用户名。
- –generic-ssh-key:免密码登录的私钥文件。
- node2:远端主机的别名。
(2)查看版本
在node2节点上,执行下面的命令检查Docker的版本信息。
(3)管理的远程主机信息
在node1节点上,执行下面的命令查看由Docker Machine管理的远程主机信息
四、管理远程的Docker主机
1、显示远端主机的环境变量信息
1
| docker-machine env node2
|
这条命令输出的内容可以作为环境变量参数来设置一些Docker客户端,从而让本机的Docker客户端可以与远程的Docker服务器通信。其中,node2是我们之前创建的远端服务器的名字。
2、设置本地的环境变量
1 2 3
| eval $(docker-machine env node2)
|
3、启动、停止和重启远端主机上的Docker环境。
1 2
| docker-machine start/stop/restart node2
|
4、查看远端主机上的Docker状态。
1
| docker-machine status node2
|
5、远程ssh登陆
Docker Machine同时也支持SSH登录,下面的命令将从master主机上以SSH方式登录到远端主机node2上。
1
| docker-machine ssh node2
|
五、常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| Options: --debug, -D 启用调试模式 --storage-path, -s "C:\Users\cwsheng\.docker\machine" 配置存储路径 [$MACHINE_STORAGE_PATH] --tls-ca-cert 验证远程CA [$MACHINE_TLS_CA_CERT] --tls-ca-key 生成证书的私钥 [$MACHINE_TLS_CA_KEY] --tls-client-cert 用于TLS的客户端证书 [$MACHINE_TLS_CLIENT_CERT] --tls-client-key 客户端TLS身份验证中使用的私钥[$MACHINE_TLS_CLIENT_KEY] --github-api-token 用于请求Github API的令牌 [$MACHINE_GITHUB_API_TOKEN] --native-ssh 使用本机(基于Go的)SSH实现 [$MACHINE_NATIVE_SSH] --bugsnag-api-token 用于崩溃报告的BugSnag API令牌 [$MACHINE_BUGSNAG_API_TOKEN] --help, -h 显示帮助列表 --version, -v 显示版本 Commands: active 输出活动状态的机器 config 输出指定机器的连接配置 create 创建一个机器 env 显示docker客户端环境设置的命令 inspect 查看机器相关信息 ip 获取机器的IP地址 kill 杀死一台机器 ls 显示机器列表 provision 重现提供现有机器 regenerate-certs 为机器重新生成TLS证书 restart 重启机器 rm 移除机器 ssh 在使用SSH的机器上登录或运行命令 scp 在机器之间复制文件 mount 从具有SSHFS的计算机上装载或卸载目录 start 启动机器 status 获取机器状态 stop 暂停机器 upgrade 将计算机升级到Docker的最新版本 url 获取机器的URL version 显示Docker Machine版本 help 显示命令的帮组列表
|
重点关注创建时相关参数设置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| --driver, -d "none"
--engine-install-url "https://get.docker.com"
--engine-opt [--engine-opt option --engine-opt option
--engine-insecure-registry [--engine-insecure-registry option --engine-insecure-registry option]
--engine-registry-mirror [--engine-registry-mirror option --engine-registry-mirror option]
--engine-label [--engine-label option --engine-label option]
--engine-storage-driver
--engine-env [--engine-env option --engine-env option]
--swarm
--swarm-image "swarm:latest"
--swarm-master
--swarm-discovery
--swarm-strategy "spread"
--swarm-opt [--swarm-opt option --swarm-opt option]
--swarm-host "tcp://0.0.0.0:3376"
--swarm-addr
--swarm-experimental
|
