问题描述
如:有三台机器 160 161 和189 (docker swarm 集群)
如果需要解析160机器上的虚拟机上文件,docker容器启动服务时,需要将宿主机器的解析目录挂载到容器解析目录上。当docker swarm 启动分配服务到161或者189子节点时,容器解析目录无法访问160主节点目录。
解决方案
1、搭建文件服务器,不管在服务在160或者161或者189上时,解析目录都指向文件服务器work 目录。服务接收和解析都指向同一个地方。
2、在manger 160机器上 搭建 NFS共享存储。不管在哪台服务上解析,都是在指向共享目录中。
实际操作
用docker使用nfs 做跨主机存储共享目录结构
构建容错应用程序时,可能需要配置同一服务的多个副本才能访问相同的文件。
-
安装nfs
yum install nfs-utils rpcbind -y (yum安装nfs)
mkdir -p /data/nfs/docker (指定一个目录)
echo “/data/nfs *(rw,no_root_squash,sync)”>>/etc/exports (写入)
exportfs -r
systemctl start rpcbind nfs-server (启动)
systemctl enable rpcbind nfs-server (开机启动)
showmount -e localhost (查看) -
docker节点需要安装nfs 客户端 (在不同机器上执行)
sudo apt install nfs-common showmount -e 192.168.1.160 docker volume create --driver local --opt type=nfs --opt o=addr=192.168.1.160,rw --opt device=:/data/nfs volume-nfs
docker volume inspect volume-nfs
-
编排docker-swarm 文件
version: "3.4"
services:
oms-bulk:
image: docker-image
deploy:
endpoint_mode: dnsrr
resources:
limits:
memory: "2048M"
volumes:
- /etc/localtime:/etc/localtime:ro
- "volume-nfs:/mnt" (指向共享目录)
volumes:
volume-nfs:
driver: local
driver_opts:
type: "nfs"
o: "addr=192.168.1.160,rw"
device: ":/data/nfs/docker"
networks:
default:
external:
name: cnpl-oms