1. 概述
使用Docker Swarm的情况是在多个集群的服务器已经搭建好Docker环境的情况下进行。如果在多台服务环境下,并没有安装好Docker环境,想要快速搭建一套Docker主机集群,就要使用到Docker Machine。
Docker Machine是Docker官方的开源项目,负责实现对Docker主机本身进行管理,由Go语言编写,开源地址为https://github.com/docker/machine。
通过Machine用户可以在本地任意指定被Machine管理的Docker主机,并对其进行操作。Docker Machine 的定位主要是“在本地或者云环境中创建Docker”。其基本功能为:
在指定的节点上安装Docker引擎,配置其为Docker主机。
集中管理所有Docker主机。
总之Docker Machine 是一个工具,它允许你在虚拟宿主机上安装 Docker Engine ,并使用 docker-machine 命令管理这些宿主机。你可以使用 Machine 在你本地的 Mac 或 Windows box、公司网络、数据中心、或像 AWS 或 Digital Ocean 这样的云提供商上创建 Docker 宿主机。
使用 docker-machine 命令,你可以启动、审查、停止和重新启动托管的宿主机、升级 Docker 客户端和守护程序、并配置 Docker 客户端与你的宿主机通信。
2. Docker Engine
从上图可以看出Docker Engine主要包括以下几个部分:
Docker Daemon — docker的守护进程,属于C/S中的server
Docker REST API — docker daemon向外暴露的REST接口
Docker CLI — docker向外暴露的命令行接口(Command Line API)
docker engine接受docker从CLI命令,例如 docker run 运行一个容器,
Docker Machine是一个供应和管理Docker化主机的工具(Docker Engine上的主机)。
在本地系统上安装Docker Machine,Docker Machine就会拥有自己的命令行客户端 docker-machine和Docker Engine客户端docker。你可以使用Machine在一个或多个虚拟系统上安装Docker Engine。这些虚拟系统可以是本地的(例如当您使用Machine在Mac或Windows上的VirtualBox中安装和运行Docker引擎)或远程(如当您使用Machine在云提供者上配置Docker化主机时)。这些通过Machine被Docker化的主机本身,有时也称为被管理的宿主机(“machines”)。
3. 安装
curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-uname -s
-uname -m
>/tmp/docker-machine && chmod +x /tmp/docker-machine && cp /tmp/docker-machine /usr/local/bin/docker-machine
4. 命令
命令 | 说明 |
---|---|
active | 查看当前激活状态的Docker主机 |
config | 查看到激活Docker主机的连接信 |
create | 创建一个Docker主机 |
env | 显示连接到某个主机需要的环境变量 |
inspect | 以json格式输出指定Docker主机的详细信息 |
ip | 获取指定的Docker主机地址 |
kill | 直接杀死指定的Docker主机 |
ls | 列出所有管理的主机 |
regenerate-certs | 为某个主机重新生成TLS认证信息 |
restart | 重启指定Docker主机 |
rm | 删除某台Docker主机。对应虚拟机会被删除 |
scp | 在Docker主机之间以及Docker主机和本地之间通过scp命令来远程复制文件 |
ssh | 通过SSH连接到主机上,执行命令 |
start | 启动一个指定的Docker主机。如果对象是虚拟机,该虚拟机将被启动 |
status | 获取指定Docker主机的状态,包括Running、Paused、Saved、Stopped、Stopping、Starting、Error等 |
stop | 停止一个Docker主机 |
upgrade | 将指定主机的Docker版本更新为最新 |
url | 获取指定Docker主机的监听URL |
help,h | 输出帮助信息 |
4.1 查看当前激活状态的Docker主机
docker-machine active [OPTIONS] [arg…]
4.2 查看到激活Docker主机的连接信息
docker-machine config [OPTIONS] [arg…]
4.3 创建一个Docker主机
格式: docker-machine create [OPTIONS] [arg…]
–dirve,-d “none”指定驱动类型;
–engine-install-url “https://get.docker.com” 配置Docker主机时候的安装URL;
–engine-opt option 以键值对格式指定所创建Docker引擎的参数;
–engine-insecure-registry option 以键值对格式指定所创建Docker引擎允许访问的不支持认证的注册仓库服务;
–engine-registry-mirror option 指定使用注册仓库镜像;
–engine-label option 为所创建的Docker引擎添加标签;
–engine-storage-driver 存储后端驱动类型;
–engine-env option 指定环境变量;
–swarm 指定使用Swarm;
–swarm-image “swarm:latest”使用Swarm时候采用的镜像;
–swarm-master 配置集群作为Swarm集群的master节点;
–swarm-discovery Swarm 集群的服务发现机制参数;
–swarm-strategy “spread” Swarm默认调度策略;
–swarm-opt option 任意传递给Swarm的参数;
–swarm-host “tcp://0.0.0.0:3376” 指定地址将监听Swarm master节点请求;
–swarm-addr 从指定地址发送广播加入Swarm集群服务。
比如创建一个命名为think的主机,ip地址为39.108.119.87,指定代理镜像地址和驱动类型,
docker-machine create --driver generic --generic-ip-address=39.108.119.87 --engine-registry-mirror=https://registry.docker-cn.com think
4.4 显示连接到某个主机需要的环境变量
docker-machine env think
4.5 以json格式输出指定Docker主机的详细信息
docker-machine insepct think
4.6 查看think主机的ip地址
docker-machine ip think
4.7 直接杀死指定的Docker主机
docker-machine kill think
4.8 列出所有管理的主机
docker-machine ls [OPTIONS] [arg…]
5. 构建
实验环境中有三个主机,其中有一个安装好了Docker环境,同时安装了Docker Machine。
docker-machine ls查看一下当前的machine:
创建 machine 要求能够无密码登录远程主机
[root@master ~]# docker-machine create --driver generic --generic-ip-address=192.168.1.74 --engine-registry-mirror=https://registry.docker-cn.com --engine-registry-mirror=https://2savhou3.mirror.aliyuncs.com think
–driver generic 为指定驱动类型,–generic-ip-address 为指定目标系统的IP,–engine-registry-mirror 为指定镜像源地址(这里更改为国内镜像源,不然后面安装容器可能无法pull镜像下来),并命名为 think。
Docker Machine执行操作的步骤:
通过SSH登录到远程主机上。
负责在远处主机上执行安装docker步骤。
拷贝证书。
配置 docker daemon。
启动 docker 服务。
[root@master ~]# docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
think - generic Running tcp://192.168.1.74:2376 Unknown Unable to query docker version: Cannot connect to the docker engine endpoint
docker-machine config think
docker-machine ssh think
docker-machine scp [machine1:][path] [machine2:][path]
docker-machine upgrade think dev
————Blueicex 2020/03/25 20:45 blueice1980@126.com