14、熟悉Docker-Machine

14、熟悉Docker-Machine

​ Docker Machine是Docker官方提供的一个远程管理工具。通过使用Docker Machine,可以帮助开发人员在远程主机上安装Docker;或者在远程的虚拟主机上直接安装虚拟机并在虚拟机中安装Docker。Docker Machine还提供了相应的命令来管理这些远程的Docker环境和虚拟机。

注:在最新版的docker中已经弃用 Docker Machine工具了,使用的场景应该是比较少的在生产中。这里简单学习了解一下即可。

​ 下图是官方提供的一张关于Docker Machine的图片,很形象地说明了Docker Machine的功能。

img

官网: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
# node1节点执行
# 下载安装
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的版本信息。

1
2
3
docker version

# 提示:在执行“docker-machine create”命令时,将会把远端主机的主机名修改为指定的别名。由于这里使用的别名是“node2”,所以看不出区别。

(3)管理的远程主机信息

在node1节点上,执行下面的命令查看由Docker Machine管理的远程主机信息

1
docker-machine ls

四、管理远程的Docker主机

1、显示远端主机的环境变量信息

1
docker-machine env node2

​ 这条命令输出的内容可以作为环境变量参数来设置一些Docker客户端,从而让本机的Docker客户端可以与远程的Docker服务器通信。其中,node2是我们之前创建的远端服务器的名字。

2、设置本地的环境变量

1
2
3
eval $(docker-machine env node2)

# 该命令是运行在当前的命令行终端中,但使用该命令后接下来运行的docker命令操作的都是远端主机。例如:在master主机上执行该命令后,尝试拉取一个Nginx镜像。这时将在远端主机的node2上完成Nginx镜像的拉取

3、启动、停止和重启远端主机上的Docker环境。

1
2
docker-machine start/stop/restart node2
# 提示:generic驱动类型不支持stop命令。

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"
# 用于引擎安装的自定义URL [$MACHINE_DOCKER_INSTALL_URL]
--engine-install-url "https://get.docker.com"
# 以flag=value的形式指定要包含在所创建引擎中的任意标志
--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 [--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
# 指定用于集群的docker镜像 [$MACHINE_SWARM_IMAGE]
--swarm-image "swarm:latest"
# 将机器设置集群管理节点
--swarm-master
# 使用swarm发现服务
--swarm-discovery
# 为Swarm定义一个默认的调度策略
--swarm-strategy "spread"
# 为swarm定义任意标志
--swarm-opt [--swarm-opt option --swarm-opt option]
# 监听Swarm master的ip/socket
--swarm-host "tcp://0.0.0.0:3376"
# 为Swarm做addr的地址(默认:检测并使用机器IP)
--swarm-addr
# 启用Swarm体验功能
--swarm-experimental
#####根据driver不同参数会有些不同######……


14、熟悉Docker-Machine
http://blog.kjiang.vip/posts/1950070041.html
作者
发布于
2025年7月25日
许可协议