Docker利器之Machine项目


Docker MachineDocker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境。Machine 项目是基于 Go 语言实现的,目前在 Github上进行维护。

Docker利器之Machine项目


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

MacWindows 的客户端工具自带了 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 选项进行选择,通常有 azuregooglehypervopenstackvirtualboxnone 等。另外其还支持第三方驱动,可以参考 Available driver plugins 查看。驱动类型 xhyvemacOS 上轻量化的虚拟引擎,使用其创建的 MachineVirtualBox 驱动创建的运行效率要高。

  • [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

Docker三剑客之Machine项目

# 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

Docker三剑客之Machine项目

# 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 输出帮助信息

文章作者: Escape
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !
  目录