文章目录
前言
1、Docker Machine 简介
- Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境。
- Docker Machine支持在常规Linux操作系统、虚拟化平台、openstack、公有云等不同环境下安装配置docker host。
- Docker Machine 项目基于 Go 语言实现,目前在 Github 上的维护地址: https://github.com/docker/machine/
2、Docker Machine 实践
2.1 Docker Machine的安装
1.在线安装
curl -L https://github.com/docker/machine/releases/download/v0.16.1/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine
chmod +x /tmp/docker-machine #添加可执行权限
cp /tmp/docker-machine /usr/local/bin/docker-machine
docker-machine version #查看版本
docker-machine version 0.16.1, build cce350d7
2.本实验采用下载好的Docker Machine
[root@server1 ~]# ll docker-machine-Linux-x86_64-0.16.1
-rwxr-xr-x 1 root root 28201440 Jan 28 14:04 docker-machine-Linux-x86_64-0.16.1
[root@server1 ~]# mv docker-machine-Linux-x86_64-0.16.1 /usr/local/bin/docker-machine
[root@server1 ~]# chmod +x /usr/local/bin/docker-machine
2.2 如何创建我们的Machine
-
创建流程:
ssh免密登陆远程主机
安装docker软件包
复制证书
配置docker daemon
启动docker -
创建machine:
machine指的是docker daemon主机,其实就是在host上安装和部署docker。 -
创建machine要求免密登陆远程主机:
#ssh-keygen
#ssh-copy-id 目标ip -
创建主机:(离线安装需要在目标主机提前安装好docker-ce)
#docker-machine create --driver generic --generic-ip-address=1.2.3.2 server2
做免密
server1上执行docker-machine create --driver generic --generic-ip-address=1.2.3.2 server2
并到server2上看有没有2376端口被监听
查看docker主机(server1)上生成的配置文件
[root@server2 ~]# cd /etc/systemd/system/docker.service.d
[root@server2 docker.service.d]# ls
10-machine.conf
[root@server2 docker.service.d]# cat 10-machine.conf
[root@server1 server2]# docker-machine config server2
2.3 如何远程控制我们创造的machine
- 管理machine:
连接远程docker主机时需要执行以下命令,但不方便:
#dockerdocker-machine config server12
ps
#docker-machine env server2 显示访问server2所需的环境变量:
根据提示执行:eval $(docker-machine env server2),可以直接切入目标主机。但是操作不是很明显,会让人误以为还是server1。
为了直观感受到已经切换到server2,这里我们进行以下操作
方法:
安装bash脚本,使得行提示符更加的人性化:
# 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
wget "$base/contrib/completion/bash/${i}" -P /etc/bash_completion.d
done
# vim ~/.bashrc
PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '
对server1的操作:
[root@server1 ~]# yum list bash-*
bash.x86_64
bash-completion.noarch ##一定要先安装
bash-doc.x86_64
[root@server1 bash_completion.d]# pwd
/etc/bash_completion.d
[root@server1 bash_completion.d]# ll *.bash
-rwxr-xr-x 1 root root 12211 Jan 28 14:18 docker-machine.bash
-rwxr-xr-x 1 root root 1469 Jan 28 14:18 docker-machine-prompt.bash
-rwxr-xr-x 1 root root 1525 Jan 28 14:18 docker-machine-wrapper.bash
[root@server1 ~]# vim ~/.bashrc
[root@server1 ~]# cat ~/.bashrc | grep PS1
PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '
[root@server1 ~]# eval $(docker-machine env server2)
[root@server1 ~ [server2]]# docker images
2.4 若受控主机没有安装docker服务(docker-ce)
若受控主机没有安装docker服务(docker-ce),是台准新机怎么办,这里以server3(1.2.3.3)为例子。
2.4.1 配置本地源
[root@westos html]# vim docker-ce.repo
[root@westos html]# cat docker-ce.repo
[docker]
name=docker-ce
baseurl=http://1.2.3.200/docker-ce
gpgcheck=0
2.4.2 配置免密
2.4.3 下载安装脚本,并修改脚本为本地yum源
[root@server1 ~]# wget https://get.docker.com ##下载脚本,并修改脚本为本地yum源
[root@server1 ~]# ll index.html
-rw-r--r-- 1 root root 13857 Dec 9 12:25 index.html
[root@server1 ~]# mv index.html get-docker.sh
[root@server1 ~]# vim get-docker.sh
修改如下(行数):
412 yum_repo="http://1.2.3.200/docker-ce.repo"
471 fi
472 # install the correct cli version first
473 #if [ -n "$cli_pkg_version" ]; then
474 # $sh_c "$pkg_manager install -y -q docker-ce-cl i-$cli_pkg_version"
475 #fi
476 $sh_c "$pkg_manager install -y -q docker-ce"
[root@server1 ~]# scp get-docker.sh root@1.2.3.200:/var/www/html ##发送到真机默认发布目录
2.4.4 保证server3可以联网,然后一条命令即可安装
docker-machine create --driver generic --engine-install-url "http://1.2.3.200/get-docker.sh" --generic-ip-address 1.2.3.4 server4