Docker-Machine

Docker-Machine 集中管理所有docker主机,可以直接在主机上远程到其他主机上或者在本地执行docker命令,给节点安装docker,它可以运行在任何系统中,不过已经很久没有更新啦,安装也很简单 就是比较慢

安装Docker-Machine

按照官方的步骤:

安装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: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host        valid_lft forever preferred_lft forever2: ens192: mtu 1500 qdisc mq state UP group default qlen 1000    link/ether 00:0c:29\:\cd:e7:6a brd ff:ff:ff:ff:ff:ff    inet 192.168.8.251/24 brd 192.168.8.255 scope global noprefixroute ens192       valid_lft forever preferred_lft forever    inet6 fe80::10dd:2b20:dc6c:57f1/64 scope link noprefixroute        valid_lft forever preferred_lft forever4: docker0: mtu 1500 qdisc noqueue state DOWN group default     link/ether 02:42:42:99:33:3e brd ff:ff:ff:ff:ff:ff    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0       valid_lft forever preferred_lft forever

可以通过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的基本操作啦 如果您有更多的想法欢迎私信我 我们可以一起学习 一起讨论

preview

如果觉得我的文对你有帮助的话 可以关注下我的公众号 一般写文第一时间发布到公众号中

公众号名称 咕咕崽

二维码: 

你可能感兴趣的:(docker,linux,容器)