1.在老旧的Mac or Windows机器上运行docker
2.为多台远程主机(虚拟机,云主机,局域网内机器)安装docker
官方教程:Install Docker Machine
#根据实际情况选择版本号
base=https://github.com/docker/machine/releases/download/v0.16.1 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
sudo install /tmp/docker-machine /usr/local/bin/docker-machine
从这里直接下载,然后重命名为docker-machine,并移到/usr/local/bin下。
#重命名-->授权-->移到/usr/local/bin下
rm docker-machine-Linux-x86_64 docker-machine
chmod +x docker-machine
cp docker-machine /usr/local/bin
之后,检测是否安装成功
docker-machine version
docker-machine -v
base=https://raw.githubusercontent.com/docker/machine/v0.16.1
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
从https://github.com/docker/machine/tree/v0.16.1/contrib/completion/bash(对应版本号)下载以下三个脚本文件,然后拷贝到/etc/bash_completion.d目录下。
source /etc/bash_completion.d/docker-machine-prompt.bash
最后,添加 $(__docker_machine_ps1)到PS1设置中~/.bashrc。
vim ~/.bashrc,添加以下内容。
PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '
已经在宿主机上安装了docker machine,docker macine需要在通过docker的客户端远程控制虚拟机上的docker服务。从https://download.docker.com/win/static/stable/x86_64/docker-17.09.0-ce.zip下载软件包,这个是最新版本的windows的docker可执行程序,解压缩以后将其中的文件docker放在 h o m e / b i n 目 录 下 , home/bin目录下, 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.1 |
worker1 | 10.0.3.9 | 192.168.5.14 |
worker2 | 10.0.3.10 | 192.168.5.0 |
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 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/: