Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境。Machine 项目是基于 Go 语言实现的,目前在 Github上进行维护。
1. 安装配置说明
其实并没有什么特殊的配置,且使用客户端工具的用户无需安装和配置。
- [1] Linux
在 Linux 上安装十分简单,从官方 GitHub Release 处直接下载编译好的二进制文件即可。
# 在Linux64位系统上直接下载对应的二进制包 $ sudo curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine $ sudo chmod +x /usr/local/bin/docker-machine
- [2] MacOS/Windows
而 Mac 和 Windows 的客户端工具自带了 docker-machine 二进制包,安装之后即可使用。
# 查看版本信息 $ docker-machine -v docker-machine version 0.13.0, build 9ba6da9
- [3] 命令行补全
如果在使用 docker-machine 的时候发现命令无法补全,就需要我们进行配置。
# Linux 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
# MacOS # 从docker安装目录中获取补全插件 $ ll /Applications/Docker.app/Contents/Resources/etc [email protected] 1 Escape admin 13K 8 27 19:44 docker-compose.bash-completion [email protected] 1 Escape admin 19K 8 27 19:44 docker-compose.zsh-completion [email protected] 1 Escape admin 12K 8 27 19:44 docker-machine.bash-completion [email protected] 1 Escape admin 13K 8 27 19:44 docker-machine.zsh-completion [email protected] 1 Escape admin 105K 8 27 19:44 docker.bash-completion [email protected] 1 Escape admin 49K 8 27 19:44 docker.fish-completion [email protected] 1 Escape admin 123K 8 27 19:44 docker.zsh-completion
2. 创建主机实例
创建主机会根据不同的驱动有不同的参数,如果我们看文档的时候发现有 --swarm*等一系列参数时,它们都是用于旧的 Swarm 的。
官方支持的驱动可以通过 -d 选项进行选择,通常有 azure 、 google 、 hyperv 、 openstack、 virtualbox 、none 等。另外其还支持第三方驱动,可以参考 Available driver plugins 查看。驱动类型 xhyve 是 macOS 上轻量化的虚拟引擎,使用其创建的 Machine 较 VirtualBox 驱动创建的运行效率要高。
- [1] 创建没有驱动的主机 - none 驱动
$ docker-machine create --driver none --url=tcp://50.134.234.20:2376 custombox
- [2] 创建本地主机实例 - virtualbox 驱动
$ docker-machine create -d virtualbox --virtualbox-boot2docker-url ~/.docker/machine/cache/boot2docker.iso --engine-opt dns=114.114.114.114 # 配置Docker的默认DNS --engine-registry-mirror https://registry.docker-cn.com # 配置Docker的仓库镜像 --virtualbox-memory 2048 # 配置主机内存 --virtualbox-cpu-count 2 # 配置主机CPU个数 virtualbox-machine
# 查看更多参数设置 $ docker-machine create --driver virtualbox --help
- [3] 创建本地主机实例 - xhyve 驱动
# install xhyve drive $ brew install docker-machine-driver-xhyve # docker-machine-driver-xhyve need root owner and uid $ sudo chown root:wheel $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve $ sudo chmod u+s $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
# 非首次创建时建议加上注释的参数,避免每次创建时都重新下载 $ docker-machine create -d xhyve # --xhyve-boot2docker-url ~/.docker/machine/cache/boot2docker.iso --engine-opt dns=114.114.114.114 --engine-registry-mirror https://registry.docker-cn.com --xhyve-memory-size 2048 --xhyve-rawdisk --xhyve-cpu-count 2 xhyve-machine
# 查看更多参数设置 $ docker-machine create --driver xhyve --help
- [4] 在 Swarm 集群中使用
$ docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery token://<token> --swarm-strategy binpack --swarm-opt heartbeat=5s upbeat
- [5] 在云提供商上配置主机 - DO
# Digital Ocean $ docker-machine create --driver digitalocean --digitalocean-access-token xxxxx docker-sandbox # https://docs.docker.com/machine/examples/ocean/ $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM default - virtualbox Running tcp://192.168.99.100:2376 docker-sandbox - digitalocean Running tcp://45.55.139.48:2376
- [5] 在云提供商上配置主机 - AWS
# Amazon Web Service $ docker-machine create --driver amazonec2 --amazonec2-access-key AKI******* --amazonec2-secret-key 8T93C******* aws-sandbox # https://docs.docker.com/machine/examples/aws/ $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS aws-sandbox - amazonec2 Running tcp://52.90.113.128:2376 v1.10.0 default - virtualbox Running tcp://192.168.99.100:2376 v1.10.0-rc4 digi-sandbox - digitalocean Running tcp://104.131.43.236:2376 v1.9.1
3. 日常使用命令
好记性不如烂笔头,哈哈哈。
- [1] 查看主机实例
$ docker-machine ls
- [2] 查看主机实例的环境变量
$ docker-machine env xhyve-machine
- [3] 远程登录主机实例
$ docker-machine ssh xhyve-machine $ docker-machine ssh xhyve-machine "cat /etc/hosts"
- [4] 获取主机实例的 IP 地址
$ docker-machine ip xhyve-machine
- [5] 启停主机实例
$ docker-machine stop xhyve-machine $ docker-machine start xhyve-machine
- [6] 挂载和卸载目录
# 如果需要在machine中使用目录挂载的话,就需要在本机或者machine中安装sshfs服务 # 参考链接来自 => https://github.com/Atamos/docker-machine-sshfs # 1.官方网址下载最新的sshfs版本 https://github.com/libfuse/sshfs/releases # 2.将sshfs复制进入machine容器中 $ docker-machine scp sshfs.tgz machinename:/root/ # 3.在machine容器中安装依赖 $ docker-machine ssh machinename $ tce-load -iw gcc-dev # or some library package that configure may require $ tce-load -iw compiletc.tcz $ tce-load -wi linux-headers-3.0.21-tinycore.tcz $ tce-load -iw squashfs-tools-4.x.tcz $ tce-load -iw glibc_apps.tcz # 4.解压编译 $ tar zxvf sshfs.tgz; cd sshfs $ ./configure --prefix=/usr/local RPCGEN="$(readlink -f $(which rpcgen)) -Y "$(dirname $(which cpp)) $ make # 5.创建软件包 $ touch /tmp/sshfs $ make DESTDIR=/tmp/sshfs install-strip $ cd /tmp $ mksquashfs sshfs sshfs.tcz # 6.安装软件 $ tce -i sshfs.tcz
# 挂载 $ mkdir /data/app $ docker-machine ssh xhyve-machine mkdir foo $ docker-machine mount xhyve-machine:/home/docker/foo /data/app # 卸载 $ docker-machine mount -u xhyve-machine:/home/docker/foo /data/app $ rmdir /data/app
- [7] 复制目录内容
$ docker-machine scp -r -d /data/app/ xhyve-machine:/home/docker/bar/
- [8] 查看具体的用法
$ docker-machine COMMAND --help
编号 | 操作命令 | 解释说明 |
---|---|---|
1 | create | 创建一个 Docker 主机 |
2 | env | 显示连接到某个主机需要的环境变量 |
3 | ssh | SSH 到主机上执行命令 |
4 | status | 查看主机状态 |
5 | start | 启动一个主机 |
6 | stop | 停止一个主机 |
7 | restart | 重启主机 |
8 | kill | 停止某个主机 |
9 | ls | 列出所有管理的主机 |
10 | ip | 获取主机地址 |
11 | url | 获取主机的 URL 地址 |
12 | rm | 删除某台主机 |
13 | scp | 在主机之间复制文件 |
14 | mount | 挂载主机目录到本地 |
15 | active | 查看活跃的 Docker 主机 |
16 | inspect | 输出主机更多信息 |
17 | config | 输出连接的配置信息 |
18 | upgrade | 更新主机 Docker 版本为最新 |
19 | provision | 重新设置一个已存在的主机 |
20 | regenerate-certs | 为某个主机重新生成 TLS 认证信息 |
21 | version | 输出版本信息 |
22 | help | 输出帮助信息 |