Docker-学习总结(三剑客之Docker-machine)

官方网站

  • Docker Machine官方网站:https://docs.docker.com/machine/
  • GitHub资源:https://github.com/docker/machine/releases/
  • 阿里云资源:http://mirrors.aliyun.com/docker-toolbox/linux/machine/

概念

  • Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境。
  • Docker Machine 是一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机
  • Docker Machine 集中管理所有的 docker 主机,比如可以快速的给 100 台服务器安装上 docker
  • Docker Machine 可以管理Linux,Mac,Windows系统的虚拟主机,也可以是管理云供应商,如阿里云,腾讯云,AWS,或 DigitalOcean上的主机,同时试用与公司内部网络及数据中心
  • 使用docker-machine命令,可以启动,检查,停止和重新启动托管的主机,升级Docker客户端和守护程序,以及配置Docker客户端以与主机进行通信
  • Docker Machine使用的场景:
    • 安装和管理多个远程Docker主机
    • 在Mac或Windows上安装并运行Docker
    • 集群管理使用
  • Docker Machine两个最为典型的使用:
    • 在低版本的Mac或Windows操作系统上运行Docker
      如果使用的Mac或Windows系统版本不能满足新版Docker的安装条件,则需要使用Docker Machine在本地系统中运行Docker Engine。使用Docker Toolbox安装程序在Mac或Windows系统上安装Docker Machine,然后使用Docker Engine创建本地虚拟机,通过虚拟机运行docker命令。
      在这里插入图片描述
    • 通过远程的方式在其他机器系统中安装Docker
      通常在安装有Linux系统的主机上,可以通过直接安装Docker软件来获取Docker的使用。 但是,如果想要在本地、网络中或者在云服务中,通过一种有效的方式配置多个Docker主机,则需要使用Docker Machine。无论主机的系统是Mac,Windows还是Linux,都可以在其上安装Docker Machine,并使用docker-machine命令配置和管理大量Docker主机。 它会自动创建主机,在其上安装Docker Engine,然后配置Docker客户端。
      在这里插入图片描述
  • Docker Engine和Docker Machine的区别:
    • Docker Engine:当人们说“ Docker”时,它们通常指的是Docker Engine,Docker的开发模式是C/S结构,使用了RSIT API标准作为C/S的接口通信标准,客户端(CLI)可以通过使用Docker命令对服务端的docker daemon守护进程下发指令,由守护进程完成具体操作。Docker Engine简单分成结构如下图:
      在这里插入图片描述
    • Docker Machine是用于置备和管理带有Docker Engine主机(称为Dockerized主机)的工具。 通常在本地系统上安装Docker Machine。 Docker Machine有自己的命令行客户端docker-machine,可以使用docker-machine命令在一个或多个虚拟系统上安装Docker Engine, 这些虚拟系统可以是本地系统的(Mac或Windows比较特殊,需要安装使用Machine在VirtualBox中安装和运行Docker Engine时),也可以是远程的。
      在这里插入图片描述

docker-machine命令

[root@node1 opt]# docker-machine --help
Usage: docker-machine [OPTIONS] COMMAND [arg...]
#格式
Create and manage machines running Docker.
#创建和管理机器的Docker运行
Version: 0.15.0, build b48dc28d
#版本号
Author:
  Docker Machine Contributors - <https://github.com/docker/machine>
#docker—machine的GitHub
Options:
  --debug, -D					Enable debug mode|debug模式
  --storage-path, -s "/root/.docker/machine"	Configures storage path [$MACHINE_STORAGE_PATH]
  --tls-ca-cert 				CA to verify remotes against [$MACHINE_TLS_CA_CERT]
  --tls-ca-key 					Private key to generate certificates [$MACHINE_TLS_CA_KEY]
  --tls-client-cert 				Client cert to use for TLS [$MACHINE_TLS_CLIENT_CERT]
  --tls-client-key 				Private key used in client TLS auth [$MACHINE_TLS_CLIENT_KEY]
  --github-api-token 				Token to use for requests to the Github API [$MACHINE_GITHUB_API_TOKEN]
  --native-ssh					Use the native (Go-based) SSH implementation. [$MACHINE_NATIVE_SSH]
  --bugsnag-api-token 				BugSnag API token for crash reporting [$MACHINE_BUGSNAG_API_TOKEN]
  --help, -h					show help
  --version, -v					print the version
  
Commands:
  active		Print which machine is active|显示处于激活状态的机器
  config		Print the connection config for machine|查看当前激活状态 Docker 主机的连接信息
  create		Create a machine|创建Docker主机
  env			Display the commands to set up the environment for the Docker client|显示连接到某个主机需要的环境变量
  inspect		Inspect information about a machine|以 json 格式输出指定Docker的详细信息
  ip			Get the IP address of a machine| 获取指定 Docker 主机的地址
  kill			Kill a machine|直接杀死指定的 Docker 主机
  ls			List machines|列出所有的管理主机
  provision		Re-provision existing machines| 重新配置指定主机
  regenerate-certs	Regenerate TLS Certificates for a machine|为某个主机重新生成 TLS 信息
  restart		Restart a machine|重启指定的主机
  rm			Remove a machine| 删除某台 Docker 主机,对应的虚拟机也会被删除
  ssh			Log into or run a command on a machine with SSH.| 通过 SSH 连接到主机上,执行命令
  scp			Copy files between machines| 在 Docker 主机之间以及 Docker 主机和本地主机之间通过 scp 远程复制数据
  mount			Mount or unmount a directory from a machine with SSHFS.| 使用 SSHFS 从计算机装载或卸载目录
  start			Start a machine| 启动一个指定的 Docker 主机,如果对象是个虚拟机,该虚拟机将被启动
  status		Get the status of a machine|获取指定 Docker 主机的状态(包括:Running、Paused、Saved、Stopped、Stopping、Starting、Error)等
  stop			Stop a machine|停止一个指定的 Docker 主机
  upgrade		Upgrade a machine to the latest version of Docker| 将一个指定主机的 Docker 版本更新为最新
  url			Get the URL of a machine| 获取指定 Docker 主机的监听 URL
  version		Show the Docker Machine version or a machine docker version|显示 Docker Machine 的版本或者主机 Docker 版本
  help			Shows a list of commands or help for one command|显示帮助信息

实践

实践环境

主机IP作用
vmhost192.168.27.7提供安装Docker软件以及yum源
node1192.168.27.11安装有Docker-machine和Docker,远程管理node2和node3
node2192.168.27.12没有安装过Docker
node3192.168.27.13没有安装过Docker

实践任务

通过node1,管理node2和node3,在node2中安装docker-ce-18.09.6-3.el7.x86_64;在node3中安装docker-ce-18.09.0-3.el7.x86_64,实现不同主机安装不同版本docker

过程

  1. node1中安装docker-machine
[root@node1 opt]# mv docker-machine-Linux-x86_64 /usr/local/bin/docker-machine
#将下载的docker-machine复制到/usr/local/bin/下,并且改名docker-machie,方便后期使用
[root@node1 opt]# chmod +x /usr/local/bin/docker-machine 
#赋予执行权限
[root@node1 opt]# docker-machine --version
docker-machine version 0.15.0, build b48dc28d
#查看版本信息,看看是不是可以使用
  1. 配置node1与node2、node3节点的解析以及ssh免密登录
[root@node1 ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.27.11 node1
192.168.27.12 node2
192.168.27.13 node3
#添加解析
[root@node1 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:FMeOHpmLIY9pI3v5X4necOD2wpU/rHzIGRVWt5v5nas root@node1
The key's randomart image is:
+---[RSA 2048]----+
|        ...  .. .|
|         o. o  ..|
|        .= . . . |
|    . ..= . .   +|
|     = +So o   + |
|  . = o.oo+.    +|
|   + o .=o+*   .o|
|  . o  ooB+ =   .|
|   . ...o.=o E.. |
+----[SHA256]-----+

[root@node1 ~]# ssh-copy-id node2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.p
The authenticity of host 'node2 (192.168.27.12)' can't be established.
ECDSA key fingerprint is SHA256:sHQAh+hBwUdb2glE0H6HaJXwif/+Pkc7IOi5yWUcRUE.
ECDSA key fingerprint is MD5:09:fa:6d:b4:e8:07:05:8e:2f:05:d1:f1:3c:68:c5:b2.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter ou
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted
root@node2's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'node2'"
and check to make sure that only the key(s) you wanted were added.

[root@node1 ~]# ssh node2
Last login: Fri Feb 14 22:47:55 2020 from 192.168.27.2
[root@node2 ~]# exit
logout
Connection to node2 closed.
[root@node1 ~]# ssh-copy-id node3
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.p
The authenticity of host 'node3 (192.168.27.13)' can't be established.
ECDSA key fingerprint is SHA256:sHQAh+hBwUdb2glE0H6HaJXwif/+Pkc7IOi5yWUcRUE.
ECDSA key fingerprint is MD5:09:fa:6d:b4:e8:07:05:8e:2f:05:d1:f1:3c:68:c5:b2.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter ou
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted
root@node3's password:
Permission denied, please try again.
root@node3's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'node3'"
and check to make sure that only the key(s) you wanted were added.

[root@node1 ~]# ssh node3
Last failed login: Sun Feb 16 02:07:00 EST 2020 from node1 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Fri Feb 14 04:42:36 2020 from 192.168.27.7
[root@node3 ~]# exit
logout
Connection to node3 closed.
#设置node2与node3节点的ssh免密登录
  1. 在vmhost,管理yum源及docker安装包的机器上,从https://get.docker.com/下在一个自动安装docker软件的脚本,并修改内容(由于使用本地镜像)
    docker-machine create 创建主机的时候是使用https://get.docker.com/里的脚本进行安装,脚本中配置下载yum,安装判断条件
[root@node1 opt]# docker-machine create --help
……
 --engine-install-url "https://get.docker.com"							Custom URL to use for engine installation [$MACHINE_DOCKER_INSTALL_URL]
……
 #用于自动安装Docker的url
[root@vmhost docker]# curl -fsSL https://get.docker.com -o get-docker.sh
……
394                 centos|fedora)
#我的机器系统是rhel7.5,所以使用centos模块
395                         yum_repo="http://192.168.27.7/docker/docker-ce.repo/"
#因为是使用本地docker资源,所以配置本地资源的docker-ce.repo文件
……
  1. 配置vmhost机器的软件资源以及repo文件
[root@vmhost docker]# vim docker-ce.repo
[docekr-ce]
name=docker-ce
baseurl=http://192.168.27.7/docker/docker-ce
gpgcheck=0
[root@vmhost docker]# createrepo docker-ce/
Spawning worker 0 with 2 pkgs
Spawning worker 1 with 2 pkgs
Spawning worker 2 with 1 pkgs
Spawning worker 3 with 1 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@vmhost docker]# cd docker-ce
[root@vmhost docker-ce]# ls
containerd.io-1.2.5-3.1.el7.x86_64.rpm   docker-ce-cli-18.09.0-3.el7.x86_64.rpm
container-selinux-2.21-1.el7.noarch.rpm  docker-ce-cli-18.09.6-3.el7.x86_64.rpm
docker-ce-18.09.0-3.el7.x86_64.rpm       repodata
docker-ce-18.09.6-3.el7.x86_64.rpm
[root@vmhost docker-ce]# cd ..
[root@vmhost docker]# tree .
.
├── docker-ce
│   ├── containerd.io-1.2.5-3.1.el7.x86_64.rpm
│   ├── container-selinux-2.21-1.el7.noarch.rpm
│   ├── docker-ce-18.09.0-3.el7.x86_64.rpm
│   ├── docker-ce-18.09.6-3.el7.x86_64.rpm
│   ├── docker-ce-cli-18.09.0-3.el7.x86_64.rpm
│   ├── docker-ce-cli-18.09.6-3.el7.x86_64.rpm
│   └── repodata
│       ├── 243263229f87f596b7ecbe93a01d940444e4ac8d8cf8ed0b4e8582ab18630023-other.xml.gz
│       ├── 2d9b9ad6421387d2307d1941c59bb0527a699f168d1c636c1e4429ea158d4c85-primary.xml.gz
│       ├── 52c7810ae37d65ec6c4aa98300cf18e2f9f954e6988e7f242c2913f4e83788c7-other.sqlite.bz2
│       ├── 81dcf009592337ded0fd74f95847b95e45a9d8de604ba06f61bc1416304eee5e-filelists.xml.gz
│       ├── dc4f567adf5257f7dcdbacf8fe2ef64339ba3e1d4838ba5816196bfaefd47ce2-primary.sqlite.bz2
│       ├── e46e247d322aae185e649942f8deaf7c43bb81e2a653dd5d102114314b623f87-filelists.sqlite.bz2
│       └── repomd.xml
├── docker-ce.repo			#docker的软件的repo文件,关联软件
└── get-docker.sh			#自动安装配置,调用docker-ce.repo文件
#docker资源
2 directories, 14 files
  1. 修改一下node2和node3的系统信息,因为自动安装软件判断系统信息是centos,做实验临时修改下
[root@node2 ~]# vim /etc/os-release
  3 ID="centos"
[root@node3 ~]# vim /etc/os-release
  3 ID="centos"
  1. 在node1上创建管理主机node2,安装docker软件18.09.6
[root@node1 ~]# docker-machine create -d generic --engine-install-url http://192.168.27.7/docker/get-docker.sh --generic-ip-address 192.168.27.12 node2
Running pre-create checks...
Creating machine...
(node2) 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 centos...
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 node2
[root@node1 ~]# docker-machine ls
NAME    ACTIVE   DRIVER    STATE     URL                        SWARM   DOCKER  ERRORS
node2   -        generic   Running   tcp://192.168.27.12:2376           v18.09.6
[root@node2 ~]# docker -v
Docker version 18.09.6, build 481bc77156
#node2节点已安装docker软件版本18.09.6
  1. 修改get-docker.sh文件,控制安装版本
[root@vmhost docker]# vim get-docker.sh
455                                 # install the correct cli version first
456                                 #if [ -n "$cli_pkg_version" ]; then
#禁止if语句判断
457                                         $sh_c "$pkg_manager install -y -q docker-ce-cli-18.09.0-3.el7.x86_64"
#在docker-ce-cli-后直接指定安装版本
458                                 #fi
#禁止if语句
459                                 $sh_c "$pkg_manager install -y -q docker-ce-18.09.0-3.el7.x86_64"
#在docker-ce-后直接指定安装版本
  1. 在node1上创建管理主机node3,安装docker软件18.09.0-3
[root@node1 ~]# docker-machine create -d generic --engine-install-url http://192.168.27.7/docker/get-docker.sh --generic-ip-address 192.168.27.13 node3
Running pre-create checks...
Creating machine...
(node3) 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 centos...
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 node3
[root@node1 ~]# docker-machine ls
NAME    ACTIVE   DRIVER    STATE     URL                        SWARM   DOCKER     ERRORS
node2   -        generic   Running   tcp://192.168.27.12:2376           v18.09.6
node3   -        generic   Running   tcp://192.168.27.13:2376           v18.09.0
#两个节点安装版本不同
[root@node3 ~]# docker -v
Docker version 18.09.0, build 4d60db4
#node3节点已安装docker软件版本18.09.0-3
  1. docker-machine中 eval $(docker-machine env node2)切换节点时显示信息问题,添加3个bash文件到/etc/bash_completion.d,将此代码PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '添加在~/.bashrc
    • 官网指导信息网址: https://docs.docker.com/machine/install-machine/【Install bash completion scripts部分】
    • bash文件下载:https://github.com/docker/machine/tree/master/contrib/completion/bash
[root@node1 bash_completion.d [node2]]# eval $(docker-machine env node3)
[root@node1 bash_completion.d [node3]]# eval $(docker-machine env node2)
#显示登录节点信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值