docker machine 安装、配置、使用实验

  • 什么是docker machine?

        docker machine是docker提供的一个命令行工具,通过这个工具可以远程管理、控制多台主机,例如在每台主机上安装、配置docker,在远程主机上执行各种docker指令等。详细参考https://docs.docker.com/machine/overview/

  • docker machine应用场景

        docker machine最多的应用场景如下图(引自docker官网):


        假设有一台windows主机,并通过VirtualBox创建了三台虚拟机。在windows主机上安装了docker machine后,就可以通过这个命令行工具控制三台虚拟机,包括在其上安装、配置docker,运行各种docker指令,而不是分别登录到每台虚拟机上去操作。

  • 安装docker machine

        首先需要在windows宿主机上安装Git BASH,打开Git BASH后执行如下指令就可以完成安装,很简单:

base=https://github.com/docker/machine/releases/download/v0.14.0 &&
  mkdir -p "$HOME/bin" &&
  curl -L $base/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" &&
  chmod +x "$HOME/bin/docker-machine.exe"

  • 安装bash补全、提示脚本

        在git bash中运行如下命令:

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
  curl -L "$base/contrib/completion/bash/${i}" -o "/etc/bash_completion.d/${i}"
done

        创建~/.bashrc文件并添加如下内容

source /etc/bash_completion.d/docker-machine-prompt.bash
PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '

重新启动git bash生效,提示的错误可以忽略,git bash会自动修复。

  • 安装docker client客户端

        已经在宿主机上安装了docker machine,docker macine需要在通过docker的客户端远程控制虚拟机上的docker服务。从https://download.docker.com/win/static/stable/x86_64/docker-17.09.0-ce.zip下载软件包,这个是最新版本的windows的docker可执行程序,解压缩以后将其中的文件docker放在$home/bin目录下,$home就是git bash的主目录,然后在git bash中执行chmod +x  docker。

  • 创建虚拟机

        docker machine本身也可以通过命令行的方式创建虚拟机,但是比较麻烦不好控制。这里直接通过VirtualBox的GUI创建三台虚拟机,镜像是ubuntu-16.04.3-server-amd64.iso。docker machine在远程的虚拟机上安装docker时肯定是需要访问外网来安装软件的,所以三台虚拟机都应该具备访问外网的能力,另外这三台虚拟机相互之间、虚拟机与windows缩主机之间也需要能够连通。这里每台虚拟机分配两张网卡,其中enp0s3是主网卡,属于nat网络,用来访问外网。enp0s8是仅host主机网络,用来在虚拟机之间、虚拟机与宿主机互连。具体配置如下表:

虚拟机名称 enp0s3 enp0s8
manager 10.0.3.8 192.168.56.103
worker1 10.0.3.9 192.168.56.104
worker2 10.0.3.10 192.168.56.105

  • 宿主机通过ssh访问虚拟机免密设置

        docker machine在虚拟机上安装docker时需要ssh能免密访问虚拟机。默认情况下,ubuntu虚拟机不允许root用户通过ssh远程访问。分别在每台虚拟机上修改/etc/ssh/sshd_config,将PermitRootLogin的值改成yes,再执行/etc/init.d/ssh restart,这样root用户可以通过ssh远程访问虚拟机了。

        在Git BASH中执行以下指令:

# 生成秘钥对,一直点回车
ssh-keygen
# 将公钥传输给虚拟机,需要输入root密码
ssh-copy-id [email protected]
ssh-copy id [email protected]
ssh-copy-id [email protected]

现在在Git BASH中通过root用户访问虚拟机时就不用输入密码了。

  • 通过docker machine在虚拟机上安装docker

        在Git BASH中执行如下指令就可以在虚拟上安装运行docker了:

docker-machine create \
  --driver generic \
  --generic-ip-address=192.168.56.103 \
  --generic-ssh-key ~/.ssh/id_rsa \
  manager
docker-machine create \
  --driver generic \
  --generic-ip-address=192.168.56.104 \
  --generic-ssh-key ~/.ssh/id_rsa \
  worker1
docker-machine create \
  --driver generic \
  --generic-ip-address=192.168.56.105 \
  --generic-ssh-key ~/.ssh/id_rsa \
  worker2

--driver generic解释:docker machine支持多种driver,这个driver表示通过何种方式创建虚拟机,比如openstack、virtualbox。这里的"generic"表示虚拟机已经创建好了,直接安装docker。参考https://docs.docker.com/machine/drivers/

--generic-ip-address=192.168.56.103解释:这个不用解释,就是远程虚拟机的IP地址。

--generic-ssh-key ~/.ssh/id_rsa解释:这个也不用解释,是ssh免密使用的公钥。

manager解释:远程虚拟机名称,这里指定的值与虚拟机原来的名称一致,如果不一致docker machine会用这个值替换原来的名称。

这条命令的总体执行过程如下,具体参考https://docs.docker.com/machine/drivers/generic/

  • If docker is not running on the host, it is installed automatically.
  • It updates the host packages (apt-get updateyum update...).
  • It generates certificates to secure the docker daemon.
  • If the host uses systemd, it creates /etc/systemd/system/docker.service.d/10-machine.conf
  • The docker daemon restarts, thus all running containers are stopped.
  • The hostname is updated to fit the machine name.

 运行docker-machine ls确认结果,如下图:

可以看到docker machine把三台虚拟机都管理起来了。
在manager虚拟机上执行docker指令,如下图:


docker-machine.exe env manager输出本地docker客户端访问远程docker服务时需要设置的环境变量,运行eval $("C:\Users\lenovo\bin\docker-machine.exe" env manager)会自动设置这些环境变量,并且如图中红框所示,提示符发生了变化,这是因为已经完装了自动补全、提示脚本的原因。此时在git bash中执行docker命令访问的就是manager这台虚拟机上的docker。

  • docker machine命令参考

activeconfigcreateenvhelpinspectipkilllsmountprovisionregenerate-certsrestartrmscpsshstartstatusstopupgradeurl

猜你喜欢

转载自blog.csdn.net/dkfajsldfsdfsd/article/details/79898787