2-10-Docker-machine

熊 1 阅读 容器

1. Machine 的基本概念和流程

Docker Machine是一个用于配置和管理带有Docker Engine主机的工具,它允许你在虚拟宿主机上安装Docker,并使用docker-machine命令管理这个宿主机,可以使用Docker Machine在本地的MAC或者windows box、公司网络,数据中心或者AWS这样的云提供商上创建docker。简单说,一个Docker Machine就是一个Docker host主机和经过配置的Docker client的结合体。其作用就是快速帮助我们搭建Docker主机环境。

Docker Machine的架构如图所示:

docker-machine-1

1.1 Machine 的基本流程

  • Docker Machine首先会创建一个虚拟机并在其上创建一个Docker host,然后使用Docker client和Docker host通信,从而在Docker host上创建镜像,启动容器。

  • 用 Docker Machine 创建虚拟机的时候需要制定相应的驱动,目前支持本机的驱动有VirtualBox驱动、VMware驱动及 Windows下的Hyper-V驱动。除此之外,Machine还支持云主机的创建。只要开发了符合框架规范的驱动,Docker Machine就可以支持相应的平台。

1.2 为什么需要使用它?

  • Docker Machine使您可以在各种linux上配置远程Docker主机。

  • Machine运行您在较旧的Mac或Windows系统上运行Docker。

1.3 Docker Enine 和Docker Machine有什么区别?

当人们说“Docker"时,他们通常指的是Docker Engine,它是由docker CLI,REST API,docker daemon组成。

docker-machine-2

Docker Machine是一个用于配置和管理Dockerized主机( 带有Docker Engine的主机 ) 的工具。

docker-machine-3

1.4 环境准备

client:192.168.0.110  centos8
host1:192.168.0.111   centos8
host2:192.168.0.112   centos8

2. 安装docker-machine( 在client机器上安装 )

  1. 首先下载二进制文件

    $ wget https://github.com/docker/machine/releases/download/v0.16.0/docker-machine-Linux-x86_64
  2. 修改可执行权限

    $ chmod +x docker-machine-Linux-x86_64
  3. 最后将二进制文件移动到/usr/local/bin 目录下

    $ sudo cp docker-machine-Linux-x86_64 /usr/local/bin/docker-machine
  4. 测试是否可用

    $ docker-machine -v
    docker-machine-4

3. 创建machine

对于Docker Machine来说,术语Machine就是运行docker daemon 的主机。“创建Machine” 指的就是在host 上安装和部署 docker。先在client机器上执行docker-machine ls查看一下当前的machine:

$ docker-machine ls
  1. 创建machine要求能够无密码登录远程主机,所以需要先通过如下命令将ssh key拷贝到192.168.0.111,192.168.0.112。

    # 先在client机器上生成ssh秘钥对
    $ ssh-keygen
    # 然后从client机器copy到host机器
    $ ssh-copy-id 192.168.0.111
    $ ssh-copy-id 192.168.0.112

    一切准备就绪,在client端执行docker-machine create命令创建host1:

    $ docker-machine create --driver generic --generic-ip-address=192.168.0.111 host1

    因为我们是往普通的Linux中部署docker,所以使用 generic driver。--generic-ip-address指定目标系统的IP,并命名为host1。

    如果报如下错误,请关闭目标机器上防火墙

    docker-machine-5
    # 关闭防火墙
    $ systemctl stop firewalld
  2. 使用同样的方法创建 host2:

    $ docker-machine create --driver generic --generic-ip-address=192.168.0.112 host2
  3. 查看

    $ docker-machine ls
    docker-machine-6

4. 管理 Machine

用docker-machine创建machine的过程很简洁,非常适合多主机环境。除此之外,Docker Machine也提供了一些子命令方便对 machine进行管理。其中最常用的就是无需登录到machine就能执行docker相关操作。

  1. 查看环境变量

    $ docker-machine env host1
    docker-machine-7
  2. 使用docker-machine ssh给host1启动容器

    $ docker-machine ssh host1 "docker run -itd busybox"
  3. 查看目标机器

    $ docker-machine ssh host1 "docker ps -a" 

5. 最后附上docker-machine 命令参数详解说明

$ docker-machine --help
config:查看当前激活状态 Docker 主机的连接信息。
create:创建 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 主机,如果对象是个虚拟机,该虚拟机将被启动
status: 获取指定 Docker 主机的状态(包括:Running、Paused、Saved、Stopped、Stopping、Starting、Error)等
stop: 停止一个指定的 Docker 主机
upgrade: 将一个指定主机的 Docker 版本更新为最新
url: 获取指定 Docker 主机的监听 URL
version: 显示 Docker Machine 的版本或者主机 Docker 版本
help: 显示帮助信息


参考链接

Docker三剑客之Machine (qq.com)