设为首页 收藏本站
查看: 1218|回复: 0

[经验分享] Docker Machine(十五)

[复制链接]

尚未签到

发表于 2019-2-21 12:51:46 | 显示全部楼层 |阅读模式
一、Docker Machine 总览
  前面我们的实验环境中只有一个 docker host,所有的容器都是运行在这一个 host 上的。但在真正的环境中会有多个 host,容器在这些 host 中启动、运行、停止和销毁,相关容器会通过网络相互通信,无论它们是否位于相同的 host。
  用 Docker Machine 可以批量安装和配置 docker host,这个 host 可以是本地的虚拟机、物理机,也可以是公有云中的云主机。
  Docker Machine 支持在不同的环境下安装配置 docker host,包括:


  • 常规 Linux 操作系统;
  • 虚拟化平台 - VirtualBox、VMWare、Hyper-V;
  • OpenStack;
  • 公有云 - Amazon Web Services、Microsoft Azure、Google Compute Engine、Digital Ocean 等。
  Docker Machine 为这些环境起了一个统一的名字:provider。对于某个特定的 provider,Docker Machine 使用相应的 driver 安装和配置 docker host,如下图所示:


1、Docker Engine VS Docker Machine
  我们平时所说的 Docker 指的是 Docker Engine,它是由 docker CLI,REST API,docker daemon 组成。

  Docker Machine是一个配置和管理我们主机的工具,管理方式如下图:


2、环境准备
  我们准备三台设备,都是安装的 Ubuntu 16.04,如下:

  client:192.168.1.200
host1:192.168.1.201
host2:192.168.1.203

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

二、安装 Docker Machine

1、Install Machine

base=https://github.com/docker/machine/releases/download/v0.14.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
sudo install /tmp/docker-machine /usr/local/bin/docker-machine
  检查安装完成。

root@ubuntu:~# docker-machine version
docker-machine version 0.14.0, build 89b8332
2、Install bash completion scripts
  为了得到更好的体验,我们可以安装 bash completion script,这样在 bash 能够通过 tab 键补全 docker-mahine 的子命令和参数。

base=https://raw.githubusercontent.com/docker/machine/v0.14.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
  使脚本生效。

source /etc/bash_completion.d/docker-machine-prompt.bash
  然后将如下代码添加到 $HOME/.bashrc:

PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '
三、创建 Machine
  对于 Docker Machine 来说,术语 Machine 就是运行 docker daemon 的主机。“创建 Machine” 指的就是在 host 上安装和部署 docker。先执行 docker-machine ls 查看一下当前的 machine:

root@ubuntu:~# docker-machine ls
NAME   ACTIVE   DRIVER   STATE   URL   SWARM   DOCKER   ERRORS
  如我们所料,当前还没有 machine,接下来我们创建第一个 machine: host1---192.168.1.201。
  创建 machine 要求能够无密码登录远程主机,所以需要先通过如下命令将 ssh key 拷贝到 192.168.1.201。

ssh-copy-id 192.168.1.201
  一切准备就绪,执行 docker-machine create 命令创建 host1:

docker-machine create --driver generic --generic-ip-address=192.168.1.201 host1
  因为我们是往普通的 Linux 中部署 docker,所以使用 generic driver。
  --generic-ip-address 指定目标系统的 IP,并命名为 host1。命令执行过程如下:

root@ubuntu:~# docker-machine create --driver generic --generic-ip-address=192.168.1.201 host1
Creating CA: /root/.docker/machine/certs/ca.pem
Creating client certificate: /root/.docker/machine/certs/cert.pem
Running pre-create checks...
Creating machine...
(host1) No SSH key specified. Assuming an existing key at the default location.
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with ubuntu(systemd)...
Installing Docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env host1


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

  再次执行 docker-machine ls :

root@ubuntu:~# docker-machine ls
NAME    ACTIVE   DRIVER    STATE     URL                        SWARM   DOCKER        ERRORS
host1   -        generic   Running   tcp://192.168.1.201:2376           v18.04.0-ce   
  使用同样的方法创建 host2:

docker-machine create --driver generic --generic-ip-address=192.168.1.203 host2
  创建好 host1 和 host2 之后,我们也可以把自己这台机器加入,指令如下:

docker-machine create --driver generic --generic-ip-address=192.168.1.200 master
  创建成功后docker-machine ls可以看到 host1 和 host2 都已经就绪:

[root@master ~]# docker-machine ls
NAME     ACTIVE   DRIVER    STATE     URL                        SWARM   DOCKER        ERRORS
host1    -        generic   Running   tcp://192.168.1.201:2376           v18.04.0-ce   
host2    -        generic   Running   tcp://192.168.1.203:2376           v18.04.0-ce   
master   -        generic   Running   tcp://192.168.1.200:2376           v18.04.0-ce
四、管理 Machine
  用 docker-machine 创建 machine 的过程很简洁,非常适合多主机环境。除此之外,Docker Machine 也提供了一些子命令方便对 machine 进行管理。其中最常用的就是无需登录到 machine 就能执行 docker 相关操作。

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

root@ubuntu:~# docker-machine env host1
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.1.201:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/host1"
export DOCKER_MACHINE_NAME="host1"
# Run this command to configure your shell:
# eval $(docker-machine env host1)
  根据提示,执行 eval $(docker-machine env host1):

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

[root@ubuntu ~ [host1]]# docker run -itd busybox
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
f70adabe43c0: Pull complete
Digest: sha256:58ac43b2cc92c687a32c8be6278e50a063579655fe3090125dcb2af0ff9e1a64
Status: Downloaded newer image for busybox:latest
13dda8965035ab88ff29541e0d1c92d9cb963063d2d9c1e118e21dea78075d09
3、docker-machine ssh
  除了上面的使用方法外,我们还有更加简便的方式,就是使用docker-machine ssh,需要我们提前配置好 /etc/hosts,比如上面的命令还可以直接通过如下指令创建。

[root@ubuntu ~]# docker-machine ssh host1 "docker run -itd busybox"
6d46a6a6f36b5ee464ff227f50a2d48e1f0db1ad9d47ce2996181436447c1a8b
[root@ubuntu ~]# docker-machine ssh host1 "docker ps -a"
CONTAINER ID     IMAGE         COMMAND       CREATED        STATUS           PORTS       NAMES
13dda8965035     busybox       "sh"     About a minute ago   Up About a minute      peaceful_payne
4、host2 启动容器
  执行eval $(docker-machine env host2)切换到 host2:

[root@ubuntu ~ [host2]]# docker ps -a
WARN[0000] Unable to use system certificate pool: requires building with go 1.7 or later
CONTAINER ID        IMAGE         COMMAND       CREATED       STATUS           PORTS        NAMES
  可见,在多主机环境下 Docker Machine 可以大大提高效率,而且操作也很简单,通过使用docker-machine ssh 我们可以不用再使用eval $(docker-machine env host2)进行切换。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-675378-1-1.html 上篇帖子: Portainer简介及部署 下篇帖子: docker简介与安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表