文章目录
docker-machine是什么?
- Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境。
- Docker Machine支持在常规Linux操作系统、虚拟化平台、openstack、公有云等不同环境下安装配置docker host。
- Docker Machine 项目基于 Go 语言实现,目前在 Github 上的维护地址:
https://github.com/docker/machine/
Docker 与 Docker Machine 的区别
- Docker 是一个 Client-Server 架构的应用,Docker是大家对Docker Engine简称
- Docker包括以下三个部分:
1 Docker daemon
2 一套与 Docker daemon 交互的 REST API
3 一个命令行客户端
下图很清晰的展示了它们之间的关系:
- Docker Machine 则是一个安装和管理 Docker 的工具。它有自己的命令行工具:docker-machine
docker-machine命令
先docker-machine --help #查看一下所有docker-machine命令
实验环境
主机名(IP) | 功能 |
---|---|
server1(172.25.11.1) | docker-machine管理端,装有docker服务 |
server2(172.25.11.2) | 没有docker服务 |
server3(172.25.11.3) | 没有docker服务 |
实验目的
- 在server1上面利用docker-machine给server2和server3自动部署docker服务
- Docker Machine 创建 Docker 主机, Docker 一个官方工具 Docker Machine(也是 Docker 三剑客之一),其作用就是快速帮助我们搭建 Docker 主机环境,比如我们要使用 Docker Swarm就必须有很多的 Docker 主机来进行操作,Docker Machine 就是最理想的工具。
创建machine
- machine指的是docker daemon主机,其实就是在host上安装和部署docker。
- 创建machine要求免密登陆远程主机:
ssh-keygen
ssh-copy-id 目标ip
- 创建主机:(离线安装需要在目标主机提前安装好docker软件包)
docker-machine create --driver generic --generic-ip-address=172.25.0.12 server2
创建的大概流程
- ssh免密登陆远程主机
- 安装docker软件包
- 复制证书
- 配置docker daemon
- 启动docker
server1
- 搭建docker的yum源,下载并开启服务,这里不再赘述。
- 在server1上面部署docker-machine,下载二进制可执行文件,重命名并授予执行权限。
[root@server1 ~]# mv docker-machine-Linux-x86_64-0.16.1 /usr/local/bin/
[root@server1 ~]# mv /usr/local/bin/docker-machine-Linux-x86_64-0.16.1 /usr/local/bin/docker-machine
[root@server1 ~]# chmod +x /usr/local/bin/docker-machine
- 查看帮助说明以及版本。
[root@server1 ~]# docker-machine --help
[root@server1 ~]# docker-machine --v
docker-machine version 0.16.1, build cce350d7
- 查看本机已经安装的docker的版本,修改html文件会用到。
[root@server1 ~]# docker version
- 三台主机做好解析,实现server1对server2~3的免密登陆。
[root@server1 ~]# ssh-keygen
ssh-copy-id server2:
ssh-copy-id server3:
ssh server2
ssh server3
- 让物理机联网,从网上拉取html文件。
[root@foundation11 html]# wget https://get.docker.com/
- 浏览器中可以访问。
- 修改此html文件内容,共修改三处,docker安装版本以及yum源的位置。
[root@foundation11 html]# vim index.html
-
给server2和server3安装docker的时候要使用真机的共享yum源
-
安装docker的版本要和yum源里面的版本一致
-
修改server2和server3的发行版本文加,将rhel改为centos。
[root@server2 ~]# vim /etc/os-release
[root@server3 ~]# vim /etc/os-release
- 修改server2和3的yum源配置文件。
[root@server2 ~]# vim /etc/yum.conf
[root@server3 ~]# vim /etc/yum.conf
- 给server2和server3自动部署docker。
[root@server1 ~]# docker-machine create --driver generic --engine-install-url="http://172.25.11.250" --generic-ip-address=172.25.11.2 server2
[root@server1 ~]# docker-machine create --driver generic --engine-install-url="http://172.25.11.250" --generic-ip-address=172.25.11.3 server3
- 安装成功!
- 查看服务的状态。
[root@server2 yum.repos.d]# systemctl status docker
[root@server3 ~]# systemctl status docker
ps:如果安装失败可以删除server2,删除生成的.repo文件,排好错之后再试
[root@server1 ~]# docker-machine ls
[root@server1 ~]# docker-machine rm server2
[root@server2 ~]# cd /etc/yum.repos.d/
[root@server2 yum.repos.d]# ls
172.25.11.250_docker.repo redhat.repo rhel7.repo
[root@server2 yum.repos.d]# rm -fr 172.25.11.250_docker.repo
- server2和server3生成的配置文件:
从配置文件中可以看出,docker daemon启用了TLS验证功能,docker-machine已经为其生成好了所需的证书文件。
[root@server2 ~]# cat /etc/systemd/system/docker.service.d/10-machine.conf
[root@server3 ~]# cat /etc/systemd/system/docker.service.d/10-machine.conf
管理machine
- 显示访问server2和server3主机的所需的环境变量信息。
[root@server1 ~]# docker-machine env server2
[root@server1 ~]# docker-machine env server3
- 连接远程docker主机时需要执行以下命令,但不方便:
docker -H tcp://172.25.11.2:2376 ps
- 根据环境变量的信息提示执行
eval $(docker-machine env server2)
,可以直接切入目标主机(此时只切换docker环境,可以通过不同主机导入的镜像不同或运行的容器不同来区分)。 - 安装bash脚本,使得行提示符更加人性化。
[root@server1 ~]# cd /etc/bash_completion.d/
lftp 172.25.11.250:/pub/docker/docker-machine> mget *.bash
[root@server1 bash_completion.d]# source docker-machine.bash
[root@server1 bash_completion.d]# source docker-machine-prompt.bash
[root@server1 bash_completion.d]# source docker-machine-wrapper.bash
- 修改用户家目录下的环境变量文件
[root@server1 ~]# vim .bashrc #加入:
PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '
[root@server1 ~]# source .bashrc
# 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切换到server2或server3:
[root@server1 ~]# docker-machine use server2
Active machine: server2
[root@server1 ~ [server2]]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@server1 ~ [server2]]# docker-machine use server3
Active machine: server3
[root@server1 ~ [server3]]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 切回server1用命令:
[root@server1 ~ [server3]]# docker-machine use -u
总结:docker-machine子命令
docker-machine upgrade server2 更新docker版本
docker-machine config server2 查看machine配置
docker-machine scp 可以在machine中复制文件
docker-machine ssh 连接machine
docker-machine rm 删除machine