Docker(八)Docker Machine 多主机管理

环境说明:

# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)
IPHostnameServices
192.168.20.201node1
192.168.20.202node2
192.168.20.203node3docker-machine

在192.168.20.203 node3上安装docker machine,然后通过docker machine命令在其他两台节点上部署docker并管理远程docker服务。

安装machine

官方文档
在node3节点上安装docker-machine:

curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine
chmod +x /usr/local/bin/docker-machine

完成后,查看版本信息:

# docker-machine -v
docker-machine version 0.13.0, build 9ba6da9

为了得到更好的体验,我们可以安装 bash completion script,这样在 bash 能够通过 tab 键补全 docker-mahine 的子命令和参数。
下载方法:

base=https://raw.githubusercontent.com/docker/machine/v0.13.0
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

确认版本将其放置到 /etc/bash_completion.d 目录下。
然后在你的bash终端中运行如下命令,告诉你的设置在哪里可以找到docker-machine-prompt.bash你以前下载的文件 。

source /etc/bash_completion.d/docker-machine-prompt.bash

要启用docker-machine shell提示符,请添加 $(__docker_machine_ps1)到您的PS1设置中~/.bashrc

PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '

创建machine

对于 Docker Machine 来说,术语 Machine 就是运行 docker daemon 的主机。“创建 Machine” 指的就是在 host 上安装和部署 docker。

创建 machine 要求能够无密码登录远程主机

ssh-keygen -t rsa
ssh-copy-id 192.168.20.201
ssh-copy-id 192.168.20.202

创建第一个 machine: host1 - 192.168.20.201:

docker-machine create --driver generic --generic-ip-address=192.168.20.201 host1

因为我们是往普通的 Linux 中部署 docker,所以使用 generic driver,其他 driver 可以参考官方文档

generic:创建一个machines通过SSH使用已经存在的虚拟机或是主机

  • 如果docker没有运行在主机上,它将被自动安装.
  • 它会更新主机的软件包(apt-get update, yum update).
  • 为了确保docker daemon的安全它会生成证书.
  • docker daemon 将会重启,因此所有正在运行的容器将会停止.
  • 主机的hostname将被更改为machine name.

--generic-ip-address 指定目标系统的 IP,并命名为 host1。命令执行过程如下:

# docker-machine create --driver generic --generic-ip-address=192.168.20.201 host1
Running pre-create checks...
Creating machine...
(host1) No SSH key specified. Assuming an existing key at the default location.      # 通过 ssh 登录到远程主机。
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with centos...				# 安装 docker。
Copying certs to the local machine directory...     # 拷贝证书。
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...    # 配置 docker daemon
Checking connection to Docker...    # 启动 docker
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env host1	

查看:

# docker-machine ls
NAME    ACTIVE   DRIVER    STATE     URL                         SWARM   DOCKER        ERRORS
host1   -        generic   Running   tcp://192.168.20.201:2376           v18.05.0-ce 

登陆到host1查看具体配置:在/etc/systemd/system/docker.service.d目录下文件名是:10-machine.conf

# cat /etc/systemd/system/docker.service.d/10-machine.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver devicemapper --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic 
Environment=

# -H tcp://0.0.0.0:2376 使 docker daemon 接受远程连接。
# --tls*对远程连接启用安全认证和加密

同时我们也看到 hostname 已经设置为 host1:

[root@host1 ~]# hostname
host1

使用同样的方法创建 host2:

docker-machine create --driver generic --generic-ip-address=192.168.20.202 host2

创建成功后 docker-machine ls 可以看到 host1 和 host2 都已经就绪:

# docker-machine ls
NAME    ACTIVE   DRIVER    STATE     URL                         SWARM   DOCKER        ERRORS
host1   -        generic   Running   tcp://192.168.20.201:2376           v18.05.0-ce   
host2   -        generic   Running   tcp://192.168.20.202:2376           v18.05.0-ce 	

管理 Machine

docker-machine 创建 machine 的过程很简洁,非常适合多主机环境。除此之外,Docker Machine 也提供了一些子命令方便对 machine 进行管理。其中最常用的就是无需登录到 machine 就能执行 docker 相关操作

Docker Machine 让执行远程 docker 命令的过程更简单。docker-machine env host1显示访问 host1 需要的所有环境变量:

# docker-machine env host1
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.20.201:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/host1"
export DOCKER_MACHINE_NAME="host1"
# Run this command to configure your shell: 
# eval $(docker-machine env host1)	

根据提示,执行 eval $(docker-machine env host1)

[root@node3 ~]# eval $(docker-machine env host1)
[root@node3 ~ [host1]]# 
[root@node3 ~ [host1]]# 

然后,就可以看到命令行提示符已经变了,其原因是我们之前在$HOME/.bashrc 中配置了 PS1='[\u@\h \W$(__docker_machine_ps1)]\$ ',用于显示当前 docker host。

在此状态下执行的所有 docker 命令其效果都相当于在 host1 上执行,例如启动一个 busybox 容器:

[root@node3 ~ [host1]]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
07a152489297: Pull complete 
Digest: sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47
Status: Downloaded newer image for busybox:latest
[root@node3 ~ [host1]]# 
[root@node3 ~ [host1]]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              8c811b4aec35        2 weeks ago         1.15MB
[root@node3 ~ [host1]]# docker run -dit busybox
03f5e67becbd87b1702a8cfc22f9623553da6cd31a5277182121bb37344121da
[root@node3 ~ [host1]]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
03f5e67becbd        busybox             "sh"                2 minutes ago       Up 3 seconds                            silly_volhard
[root@node3 ~ [host1]]# 	

执行 eval $(docker-machine env host2) 切换到 host2:

[root@node3 ~ [host1]]# eval $(docker-machine env host2)
[root@node3 ~ [host2]]# 
[root@node3 ~ [host2]]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@node3 ~ [host2]]# 

下面再介绍几个有用的 docker-machine 子命令:
1.docker-machine upgrade 更新 machine 的 docker 到最新版本,可以批量执行:

docker-machine upgrade host1 host2

2.docker-machine config 查看 machine 的 docker daemon 配置:

# docker-machine config host1
--tlsverify
--tlscacert="/root/.docker/machine/machines/host1/ca.pem"
--tlscert="/root/.docker/machine/machines/host1/cert.pem"
--tlskey="/root/.docker/machine/machines/host1/key.pem"
-H=tcp://192.168.20.201:2376

3.docker-machine scp 可以在不同 machine 之间拷贝文件,比如:

docker-machine scp host1:/tmp/a host2:/tmp/b

4.stop/start/restart 是对 machine 的操作系统操作,而 不是 stop/start/restart docker daemon。

参考链接:
https://mp.weixin.qq.com/s/7o8QxGydMTUe4Q7Tz46Diw

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值