------------------------------------重要说明------------------------------------

本文内容都是参考Cloudman系列进行学习,是个人学习过程记录,与原版不同!

原版请参考cloudman《每天5分钟玩转Docker容器技术》Cloudman博客如下:

https://blog.51cto.com/cloudman

------------------------------------重要说明------------------------------------

前面的实验环境中只有一个 docker host所有的容器都是运行在这一个 host 上的。但在真正的环境中会有多个 host容器在这些 host 中启动、运行、停止和销毁相关容器会通过网络相互通信无论它们是否位于相同的 host。

对于这样一个 multi-host 环境我们将如何高效地进行管理呢
我们面临的第一个问题是为所有的 host 安装和配置 docker。

手工安装了第一个 docker host步骤包括

1.安装 https CA 证书

2.添加 GPG key

3.添加 docker apt 源

4.安装 docker

可见步骤还是挺多的对于多主机环境手工方式效率低且不容易保证一致性针对这个问题docker 给出的解决方案是 Docker Machine。

用 Docker Machine 可以批量安装和配置 docker host这个 host 可以是本地的虚拟机、物理机也可以是公有云中的云主机。

Docker Machine 支持在不同的环境下安装配置 docker host包括

1.常规 Linux 操作系统

2.虚拟化平台 - VirtualBox、VMWare、Hyper-V

3.OpenStack

4.公有云 - Amazon Web Services、Microsoft Azure、Google Compute Engine、Digital Ocean 等

Docker Machine 为这些环境起了一个统一的名字provider

对于某个特定的 providerDocker Machine 使用相应的 driver 安装和配置 docker host如下图所示

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第1张图片

1. Docker machine介绍

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第2张图片

a) What is Docker Machine?

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第3张图片

b) Why should I use it?

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第4张图片

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第5张图片

c) What’s the difference between Docker Engine and Docker Machine?

图片.png

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第6张图片

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第7张图片

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第8张图片 

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第9张图片

2. Docker Machine环境准备

实验环境中有三个运行 Ubuntu 的 host。

Docker machine(Ubuntu01) 192.168.56.129

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第10张图片 

Docker host(Ubuntu02) 192.168.56.130

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第11张图片

Docker host(Ubuntu03) 192.168.56.128

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第12张图片

我们将在 192.168.56.129 上安装 Docker Machine然后通过 docker-machine 命令在其他两个 host 上部署 docker。

3. 安装 Docker Machine

官方安装文档在 https://docs.docker.com/machine/install-machine/

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第13张图片
 

具体参考官方文档。这里使用Linux版本

curl -L https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine &&

  chmod +x /tmp/docker-machine &&

  sudo cp /tmp/docker-machine /usr/local/bin/docker-machine

下载的执行文件被放到 /usr/local/bin 中执行docker-mahine version 验证命令是否可用

图片.png

注当你看到这篇文章的时候Docker Machine 应该有了更新的版本可参考官方文档进行安装。

为了得到更好的体验我们可以安装 bash completion script这样在 bash 能够通过 tab 键补全 docker-mahine 的子命令和参数。安装方法是从https://github.com/docker/machine/tree/master/contrib/completion/bash下载 completion script

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第14张图片

将其放置到 /etc/bash_completion.d 目录下。

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第15张图片

然后将如下代码添加到$HOME/.bashrc

#vim ~/.bashr

source /etc/bash_completion.d/docker-machine-wrapper.bash

source /etc/bash_completion.d/docker-machine-prompt.bash

source /etc/bash_completion.d/docker-machine.bash

PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '

# source ~/.bashrc

通过测试来验证是否可以补全

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第16张图片 

4. 创建 Machine

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

图片.png 

如我们所料当前还没有 machine接下来我们创建第一个 machine host1 - 192.168.56.130

创建 machine 要求能够无密码登录远程主机(192.168.56.130和192.168.56.128),ubuntu默认没有安装ssh服务,你可以通过:apt-get install -y openssh-server,默认sshd是不允许root用户直接登录的,是root可以ssh直接登录:1、更改root用户密码 2、vi /etc/ssh/sshd_config中更改如下字段PermitRootLogin yes

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第17张图片

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第18张图片 

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第19张图片 

a) Docker machine创建docker02

一切准备就绪执行 docker-machine create 命令创建 docker02

docker-machine create --driver generic --generic-ip-address=192.168.56.130 docker02

--drive 表示部署docker的主机是什么类型

图片.png 

因为我们是普通的 Linux 中部署 docker所以使用 generic driver其他 driver 可以参考文档 https://docs.docker.com/machine/drivers/。

--generic-ip-address 指定目标系统的 IP并且系统名为 docker02

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第20张图片

注意:可以看到如下报错,会一直刷新,报错说明sudo docker version找不到命令,不要关闭次窗口!!!如果你结束了此进程,按照如下操作进行:

Docker-machine ls

图片.png 

Docker-machein rm docker02

图片.png 

再去执行创建machine的设备命令!!!应该又会回到无限循环报错的情况,按照如下操作进行

去docker02这台设备运行docker version命令看看有什么报错

图片.png 

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第21张图片 

安装完成之后再去docker machine设备上查看。

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第22张图片 

可以看到操作正常了。

 

① 通过 ssh 登录到远程主机。
② 安装 docker。
③ 拷贝证书。
④ 配置 docker daemon。
⑤ 启动 docker。

再次执行 docker-machine ls 

图片.png 

已经能看到 docker02 了。 我们可以登录到 docker02 查看 docker daemon 的具体配置 

cat /etc/systemd/system/docker.service没有这个目录

cat /etc/systemd/system/docker.service.d/10-machine.conf

图片.png

-H tcp://0.0.0.0:2376 使 docker daemon 接受远程连接。

--tls* 对远程连接启用安全认证和加密。

b) 使用同样的方法创建 docker03

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第23张图片

创建成功后 docker-machine ls 可以看到 docker02 和 docker03 都已经就绪.

图片.png

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

我们前面学过,要执行远程 docker 命令我们需要通过 -H 指定目标主机的连接字符串,比如:

docker -H tcp://192.168.56.105:2376 ps

5. Docker-machine操作

a) docker-machine env [HOSTNAME]

Docker Machine 则让这个过程更简单。docker-machine env docker02显示访问 docker02 需要的所有环境变量:

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第24张图片

根据提示,执行 eval $(docker-machine env docker02)

图片.png

然后,就可以看到命令行提示符已经变了,其原因是我们之前在$HOME/.bashrc 中配置了 PS1='[\u@\h \W$(__docker_machine_ps1)]\$ ',用于显示当前 docker host。

在此状态下执行的所有 docker 命令其效果都相当于在 docker02 上执行,例如启动一个 busybox 容器:

图片.png

发现docker命令无法使用,提示需要安装docker.io

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第25张图片
 

再次执行docker命令

图片.png 

图片.png 

图片.png
 图片.png

在docker02上验证是否正常

图片.png 

图片.png
 

b) docker-machine upgrade [HOSTNAME]

docker-machine upgrade 更新 machine 的 docker 到最新版本,可以批量执行:

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第26张图片

c) docker-machine config [HOSTNAME]

docker-machine config 查看 machine 的 docker daemon 配置

图片.png


stop/start/restart 是对 machine 的操作系统操作,而 不是 stop/start/restart docker daemon。

docker-machine scp 可以在不同 machine 之间拷贝文件,比如:

docker-machine scp docker02:/tmp/a docker03:/tmp/b

可见,在多主机环境下 Docker Machine 可以大大提高效率,而且操作也很简单,希望大家都能掌握。

------------------------------------重要说明------------------------------------

本文内容都是参考Cloudman系列进行学习,是个人学习过程记录,与原版不同!

原版请参考cloudman《每天5分钟玩转Docker容器技术》Cloudman博客如下:

https://blog.51cto.com/cloudman

------------------------------------重要说明------------------------------------

书籍:

1.《每天5分钟玩转Kubernetes》
https://item.jd.com/26225745440.html

2.《每天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html

3.《每天5分钟玩转OpenStack》
https://item.jd.com/12086376.html

16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke_第27张图片