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实践(受控机器已经安装了docker-ce)
2.1 Docker Machine安装:
- 在线安装
# 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
- 本实验采用下载好的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软件包)
# docker-machine create --driver generic --generic-ip-address=172.25.70.2 server2
[root@server1 ~]# ssh-keygen
[root@server1 ~]# ssh-copy-id server2
[root@server1 ~]# docker-machine create --driver generic --generic-ip-address=172.25.17.2 server2 ##创建
[root@server1 ~]# docker-machine rm server2 ##删除
查看docker主机上生成的配置文件
[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:
连接远程docker主机时需要执行以下命令,但不方便:
# docker `docker-machine config server12` ps
# docker-machine env server2 显示访问server2所需的环境变量:
根据提示执行:eval $(docker-machine env server2),可以直接切入目标主机。但是操作不是很明显,会让人误以为是server1。
2.4 人性化的显示
- 安装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)]\$ '
[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
3. Docker Machine实践(受控机器没有安装了docker-ce)
3.1 配置本地源
[root@westos html]# vim docker-ce.repo
[root@westos html]# cat docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=0
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/7/extras/$basearch/
gpgcheck=0
3.2 配置免密
[root@server1 ~]# ssh-copy-id server3
3.3 下载并配置脚本
[root@server1 html]# curl https://get.docker.com -o get-docker.sh ##下载脚本,并修改脚本为本地yum源
[root@server1 html]# vim get-docker.sh
修改如下(行数):
412 yum_repo="http://172.25.26.250/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
[root@server1 ~]# scp get-docker.sh root@172.25.26.250:/var/www/html ##发送到真机默认发布目录
3.4 安装
[root@server1 ~]# docker-machine create --driver generic --engine-install-url "http://172.25.26.250/get-docker.sh" --generic-ip-address 172.25.26.3 server3 ##使用基础的引擎generic
3.5 测试
[root@server1 ~]# docker-machine ls
4. docker-machine 子命令
docker-machine upgrade server2 更新docker版本
docker-machine config server2 查看machine配置
docker-machine scp 可以在machine中复制文件
docker-machine ssh 连接machine
docker-machine rm 删除machine
5. yum 小知识补充
[root@server3 ~]# yum install nfs-utils.x86_64
## 安装时选择d,是下载rpm包到本地
[root@server3 ~]# cd /var/cache/yum/x86_64/7Server/
[root@server3 7Server]# ls
docker rhel7.6 timedhosts
[root@server3 packages]# pwd ##到对应的源的packages里面,rpm包在此处
/var/cache/yum/x86_64/7Server/rhel7.6/packages