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

[经验分享] 16、《每天5分钟玩转Docker容器技术》学习--Docker-machine部署docke

[复制链接]

尚未签到

发表于 2019-2-22 06:51:53 | 显示全部楼层 |阅读模式
  ------------------------------------重要说明------------------------------------
  本文内容都是参考Cloudman系列进行学习,是个人学习过程记录,与原版不同!
  原版请参考cloudman《每天5分钟玩转Docker容器技术》Cloudman博客如下:
  https://blog.运维网.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如下图所示

1. Docker machine介绍

a) What is Docker Machine?

b) Why should I use it?


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





2. Docker Machine环境准备
  实验环境中有三个运行 Ubuntu 的 host。
  l Docker machine(Ubuntu01) 192.168.56.129

  l Docker host(Ubuntu02) 192.168.56.130

  l Docker host(Ubuntu03) 192.168.56.128

  我们将在 192.168.56.129 上安装 Docker Machine然后通过 docker-machine 命令在其他两个 host 上部署 docker。
3. 安装 Docker Machine
  官方安装文档在 https://docs.docker.com/machine/install-machine/

  具体参考官方文档。这里使用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 验证命令是否可用

  注当你看到这篇文章的时候Docker Machine 应该有了更新的版本可参考官方文档进行安装。
  为了得到更好的体验我们可以安装 bash completion script这样在 bash 能够通过 tab 键补全 docker-mahine 的子命令和参数。安装方法是从https://github.com/docker/machine/tree/master/contrib/completion/bash下载 completion script

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

  然后将如下代码添加到$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
  通过测试来验证是否可以补全

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

  如我们所料当前还没有 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



a) Docker machine创建docker02
  一切准备就绪执行 docker-machine create 命令创建 docker02
  docker-machine create --driver generic --generic-ip-address=192.168.56.130 docker02
  --drive 表示部署docker的主机是什么类型

  因为我们是在普通的 Linux 中部署 docker所以使用 generic driver其他 driver 可以参考文档 https://docs.docker.com/machine/drivers/。
  --generic-ip-address 指定目标系统的 IP并且系统名为 docker02

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

  Docker-machein rm docker02

  再去执行创建machine的设备命令!!!应该又会回到无限循环报错的情况,按照如下操作进行
  去docker02这台设备运行docker version命令看看有什么报错


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

  可以看到操作正常了。
  ① 通过 ssh 登录到远程主机。
  ② 安装 docker。
  ③ 拷贝证书。
  ④ 配置 docker daemon。
  ⑤ 启动 docker。
  再次执行 docker-machine ls

  已经能看到 docker02 了。 我们可以登录到 docker02 查看 docker daemon 的具体配置 :
  cat /etc/systemd/system/docker.service没有这个目录
  cat /etc/systemd/system/docker.service.d/10-machine.conf

  -H tcp://0.0.0.0:2376 使 docker daemon 接受远程连接。
  --tls* 对远程连接启用安全认证和加密。
b) 使用同样的方法创建 docker03

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

  用 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 需要的所有环境变量:

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

  然后,就可以看到命令行提示符已经变了,其原因是我们之前在$HOME/.bashrc 中配置了 PS1='[\u@\h \W$(__docker_machine_ps1)]\$ ',用于显示当前 docker host。
  在此状态下执行的所有 docker 命令其效果都相当于在 docker02 上执行,例如启动一个 busybox 容器:

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

  再次执行docker命令




  l 在docker02上验证是否正常


b) docker-machine upgrade [HOSTNAME]
  docker-machine upgrade 更新 machine 的 docker 到最新版本,可以批量执行:

c) docker-machine config[HOSTNAME]
  docker-machine config 查看 machine 的 docker daemon 配置

  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.运维网.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



运维网声明 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-675444-1-1.html 上篇帖子: 【docker】通过仓库共享镜像 下篇帖子: 17、《每天5分钟玩转Docker容器技术》学习--Multi-host网络
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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