Docker-Machine 集中管理所有docker主机,可以直接在主机上远程到其他主机上或者在本地执行docker命令,给节点安装docker,它可以运行在任何系统中,不过已经很久没有更新啦,安装也很简单 就是比较慢
按照官方的步骤:
安装Docker Machine,并添加权限
base=https://github.com/docker/machine/releases/download/v0.16.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&
chmod +x /usr/local/bin/docker-machine
安装完之后 查看版本信息
[^_^] kfk ~# docker-machine version
docker-machine version 0.16.0, build 702c267f
可以查看到 当前主机下面没有任何一台机子
[^_^] kfk ~# docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
注意:添加子节点,必须要完成以下操作
在目标主机上创建一个用户并加入sudo 组
为该用户设置 sudo 操作不需要输入密码
把本地用户的 ssh public key 添加到目标主机上
(我这里直接用的root)
允许root登录到系统中
vim /etc/ssh/sshd_config
PermitRootLogin yes
systemctl restart sshd
设置免密登录
[root@localhost ~]# ssh-keygen
[root@localhost ~]# ssh-copy-id [email protected] //本地免密登陆
[root@localhost ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.0.12 //远程免密
[root@localhost ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.0.6 //远程免密
sudo 执行不需要密码
vim /etc/sudoers
Defaults visiblepw
将!去掉 允许任何用户直接进行提权 不需要在填写密码
将节点添加到machine集群中(注意 我这里是没有安装docker的服务器)
(悄咪咪 我尝试添加 有安装过docker环境 以及环境中还有镜像的服务器 可以的哦 镜像还在 可以 但是!! 不建议)
[^_^] kfk ~# docker-machine create --driver generic --generic-ip-address=192.168.0.6 host1
[^_^] kfk ~# docker-machine create --driver generic --generic-ip-address=192.168.0.3 host2
参数:
--driver 安装驱动器 generic
--generic-ip-address 给哪个主机安装
--generic-engine-port:用于Docker守护程序的端口(注意:此标志不适用于boot2docker)。
--generic-ip-address:主机所需的 IP地址。
--generic-ssh-key:SSH用户私钥的路径。
--generic-ssh-user:用于连接的SSH用户名。
--generic-ssh-port:用于SSH的端口。
可能会遇到报错:
Error creating machine: Error checking the host: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.29.237:2376": dial tcp 192.168.29.237:2376: i/o timeout
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'.
Be advised that this will trigger a Docker daemon restart which might stop running containers.
查看时会显示超时:
[T_T] kfk ~# docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
host1 * generic Running tcp://192.168.8.251:2376 v20.10.6
host2 generic Timeout
host3 - generic Running tcp://192.168.8.128:2376 v18.06.1-ce
清除防火墙规则就可以啦
命令:iptables -F
清除后不需要重新加入
可以通过 docker-machine ls 查看
[^_^] kfk ~# docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
host1 * generic Running tcp://192.168.8.251:2376 v20.10.6
host2 - generic Running tcp://192.168.29.237:2376 v20.10.12
host3 - generic Running tcp://192.168.8.128:2376 v18.06.1-ce
现在就可以看到 三台机子里面都有docker了 如果你问我为什么版本不一样
因为 host1 host3服务器里面本身就有docker环境(危险操作),host2中没有docker
下面就可以对节点进行操作啦
远程进入管理主机的命令:
env:显示连接到某个主机需要的环境变量
[root@localhost ~]# docker-machine env host1#
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.0.12: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)
[root@localhost ~]# eval $(docker-machine env host1)
[root@localhost ~]# source .bashrc
注意 只有docker命令 才会在在远程服务器上执行 如果不是docker命令 类似 ls touch 查看到的是本地的信息
进入host1主机状态:
[root@localhost ~ [host1]]#
远程下载镜像:
进入host1主机后,下载buxybox镜像验证是否能下载下来:
[T_T] kfk ~# docker pull busybox
Using default tag: latestlatest: Pulling from library/busybox5cc84ad355aa: Pull complete Digest: sha256:5acba83a746c7608ed544dc1533b87c737a0b0fb730301639a0179f9344b1678Status: Downloaded newer image for busybox:latestdocker.io/library/busybox:latest
[^_^] kfk ~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest beae173ccac6 6 days ago 1.24MB
到host1主机上查看信息
[^_^] kfk ~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest beae173ccac6 6 days ago 1.24MB
查看host1主机上的docker-machin的配置文件:
[root@localhost ~ [host1]]# 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.0.12:2376
切换到host2主机,并进行下载镜像来验证是否成功:
[root@localhost ~ [host1]]# eval $(docker-machine env host2)
[root@localhost ~ [host2]]# docker pull busybox
[root@localhost ~ [host2]]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 64f5d945efcc 12 days ago 1.2MB
查看节点ip
[^_^] kfk ~# docker-machine ip host1192.168.8.251
[^_^] kfk ~# docker-machine ip host3192.168.8.128
远程连接主机
[^_^] kfk ~# docker-machine ssh host1
Last login: Thu Jan 6 21:15:25 2022 from 192.168.28.12
[root@host1 ~]# ls
aa
[root@host1 ~]# echo 'i am guguzai' >/tmp/testfile
远程复制
[T_T] kfk ~# docker-machine scp host1:/tmp/testfile host3:/root/
查看hosts3
-bash-4.2# ls
testfile
-bash-4.2# pwd
/root
-bash-4.2# cat testfile
i am guguzai
远程查看 host主机网卡信息
[^_^] kfk ~# docker-machine ssh host1 ip a
1: lo:
可以通过ssh 对远程服务器进行操作(除docker之外的操作)
查看内存
[^_^] kfk ~# docker-machine ssh host1 free
查看硬盘
[^_^] kfk ~# docker-machine ssh host1 df -h
创建一个容器,查看是否成功:
[root@192 ~ [host2]]# docker run -itd --name test1 busybox
36e31ae05a6cb7cc2af9e5d25429f2cb6c7c187119f2106737e7aec4ded5ed3f
[root@192 ~ [host2]]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
36e31ae05a6c busybox "sh" 6 seconds ago Up 3 seconds test1
创建一个文件,验证容器之间可否传输文件:
进入host1的主机里,创建一个文件,用于进行docker-machine的验证:
[root@192 ~]# touch /tmp/a.txt //host1主机里创建
[root@localhost ~ [host1]]# docker-machine scp host1:/tmp/a.txt host2:/tmp/b.txt
进入host2主机上去查看目录下面是否有b.txt文件,出现则复制成功:
[root@host2 ~]# ls /tmp/
b.txt
升级所有docker-machine,谨慎使用
[root@192 ~]# docker-machine upgrade
注意 这个命令会重启docker服务
删除某一个docker-machine列表的主机:
[root@192 ~]# docker-machine rm -f 主机名
将 主机目录映射到host1中
yum -y install epel-release
yum -y install fuse-sshfs
sshfs,可以把远程目录直接映射到本地,无需修改远程机器的设置,仅要求有ssh连接的权限
[T_T] kfk ~# docker-machine ssh host1
Last login: Mon Jan 10 20:43:32 2022 from 192.168.28.12
[root@host1 ~]# mkdir /foo
[root@host1 ~]# exit
logout
[^_^] kfk ~# docker-machine mount host1:/foo /foo
[^_^] kfk ~# touch /foo/a.txt
还可以将她挂载到容器中
[T_T] kfk ~# docker run --volume /foo:/tmp/foo busybox ls /tmp/foo
a.txt
[^_^] kfk ~# touch /foo/baz
[^_^] kfk ~# docker run --volume /foo:/tmp/foo busybox ls /tmp/foo
a.txt
baz
卸载这个映射
[^_^] kfk ~# docker-machine mount -u host1:/foo
[^_^] kfk ~# rmdir /foo
以上就是docker-machine的基本操作啦 如果您有更多的想法欢迎私信我 我们可以一起学习 一起讨论
如果觉得我的文对你有帮助的话 可以关注下我的公众号 一般写文第一时间发布到公众号中
公众号名称 咕咕崽
二维码: