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
-rw-r--r--@ 1 Escape admin 13K 8 27 19:44 docker-compose.bash-completion
-rw-r--r--@ 1 Escape admin 19K 8 27 19:44 docker-compose.zsh-completion
-rw-r--r--@ 1 Escape admin 12K 8 27 19:44 docker-machine.bash-completion
-rw-r--r--@ 1 Escape admin 13K 8 27 19:44 docker-machine.zsh-completion
-rwxr-xr-x@ 1 Escape admin 105K 8 27 19:44 docker.bash-completion
-rwxr-xr-x@ 1 Escape admin 49K 8 27 19:44 docker.fish-completion
-rwxr-xr-x@ 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 |
输出帮助信息 |