Docker Swarm持久化

1 简介

Docker Swarm持久化有bind、volume和NFS三种方式,bind和volume两种方式适合挂载单个宿主机,不适合集群;NFS适合集群服务,但需要安装NFS系统。

注意:Docker Swarm需要先安装集群。

由Docker Swarm构建的集群,使用filebrowser测试。

注意:使用搭建filebrowser集群过程中,会发现刷新一次就要登录一次,因为构建的集群中每个容器副本登录都是独立的,但是集群中设置了负载均衡,所以,每刷新一次访问的容器副本不一样,导致刷新一次会登录一次。

序号主机名IP备注
1master192.168.108.201
2node1192.168.108.201

2 使用bind方式

注意:Swarm使用bind挂载目录前,需要宿主机上的相应文件系统的数据路径必须存在。系统可以在全部节点都可以访问(如果只有1个副本,也可以在全部节点上访问)。

2.1 使用命令创建

在201和202两台宿主机系统上,创建以下目录和文件,为下面创建服务使用。

注意:️ 下面的文件需要自己创建一个filebrowser容器,然后将其中的文件放到下面的目录中,因为自己创建的是空文件,容器加载过程中会出错。

--/home/filebrowser
----/srv
----/database.db
----/.filebrowser.json

创建集群,持久化使用--mount type=bind参数,注意:此处的是2个副本,如果3个副本会出现(403)问题,因为是从容器中将配置复制过来的,所以出现403错误,如果不绑定配置文件,docker swarm自己配置不会出现上面的问题。

docker service create \
--name filebrowser \
--replicas 2 \
--publish 8080:80 \
--env PGID=$(id -g) \
--env PUID=$(id -u) \
--mount type=bind,src=/home/filebrowser/srv,dst=/srv \
--mount type=bind,src=/home/filebrowser/database.db,dst=/database.db \
--mount type=bind,src=/home/filebrowser/.filebrowser.json,dst=/.filebrowser.json \
filebrowser/filebrowser:latest

查看信息

# 查看swarm的服务
docker service ls

# 查看当前节点的服务
docker node ps

2.2 使用Docker Stack创建

docker-compose.yml

version: "3.7"
services:
  filebrowser:
    image: filebrowser/filebrowser:latest
    hostname: filebrowser
    ports:
      - 8080:80
    deploy:
      mode: replicated
      replicas: 2
    volumes:
      - /home/filebrowser/srv:/srv
      - /home/filebrowser/database.db:/database.db
      - /home/filebrowser/.filebrowser.json:/.filebrowser.json

执行命令

# 执行命令
docker stack deploy -c docker-compose.yml filebrowser-stack

# 查看服务
docker stack ls	

# 列出stack中的任务
docker stack ps filebrowser-stack

# 删除
docker stack rm filebrowser-stack

# 查看服务日志
docker service logs filebrowser-stack_filebrowser

2.3 执行结果

使用账号登录filebrowse系统,从结果中可以看到,由于在上传数据时,上传到了不同的宿主机上,所以数据不一致。
在这里插入图片描述

3 使用volume方式

注意:使用volume方式创建的目录会被映射到宿主机的/var/lib/docker/volumes下,可以设置挂载目录的权限。

3.1 使用命令创建

创建volume

也可以直接借用docker run的-v参数设置数据卷,不在赘述。

# 创建数据卷
docker volume create volume_filebrowser

# 查看数据卷
docker volume ls

# 查看详情
docker volume inspect volume_filebrowser

# 删除卷
docker volume rm volume_filebrowser

# 清空所有无用数据卷,慎重操作
docker volume prune

使用volume持久化

注意:如果没有使用上面的命令创建volume,下面的命令会自动在宿主机上创建volume,上面的步骤可以省略。由于volume一般挂载的是目录,不挂载文件,所以此处没有挂载配置文件,不会出现上面的403错误。

docker service create \
--name filebrowser \
--replicas 3 \
--publish 8080:80 \
--env PGID=$(id -g) \
--env PUID=$(id -u) \
--mount type=volume,src=volume_filebrowser,dst=/srv \
filebrowser/filebrowser:latest

3.2 使用Docker Stack创建

docker-compose.yml

version: "3.7"
services:
  filebrowser:
    image: filebrowser/filebrowser:latest
    hostname: filebrowser
    ports:
      - 8080:80
    deploy:
      mode: replicated
      replicas: 3
    volumes:
      - volume_filebrowser:/srv
volumes:
  volume_filebrowser:
    driver: local

直接执行下面命令即可。

docker stack deploy -c docker-compose.yml filebrowser-stack

3.3 执行结果

在这里插入图片描述

4 使用nfs方式

4.1 创建nfs目录

注意:需要先安装nfs系统,然后在202节点上创建nfs目录

# 创建目录
mkdir -p /data/nfsdata
 
# 添加权限
chmod 777 /data/nfsdata

# 编辑文件
vim /etc/exports
 
# 添加以下内容
/data/nfsdata  192.168.108.*(rw,sync,no_subtree_check)
 
# 重启服务
systemctl restart nfs
 
# 查看共享目录
showmount -e 192.168.108.202

# 返回值如下,表示创建成功
Export list for 192.168.108.202:
/data/nfsdata 192.168.108.*

4.2 使用命令创建

创建volume

# 创建数据卷
docker volume create \
--name volume_filebrowser \
--opt "type=nfs" \
--opt "o=addr=192.168.108.202,rw" \
--opt "device=:/data/nfsdata"

使用volume持久化

注意:如果没有使用上面的命令创建volume,下面的命令会自动在宿主机上创建volume,上面的步骤可以省略。

docker service create \
--name filebrowser \
--replicas 3 \
--publish 8080:80 \
--env PGID=$(id -g) \
--env PUID=$(id -u) \
--mount type=volume,src=volume_filebrowser,dst=/srv \
filebrowser/filebrowser:latest

4.3 使用Docker Stack创建

docker-compose.yml

version: "3.7"
services:
  filebrowser:
    image: filebrowser/filebrowser:latest
    hostname: filebrowser
    ports:
      - 8080:80
    deploy:
      mode: replicated
      replicas: 3
    volumes:
      - volume_filebrowser:/srv
volumes:
  volume_filebrowser:
    driver: local
    driver_opts:
      type: "nfs"
      o: "addr=192.168.108.202,rw"
      device: ":/data/nfsdata"

直接执行下面命令即可。

docker stack deploy -c docker-compose.yml filebrowser-stack

4.4 执行结果

由于使用的是nfs,挂载的是同一个目录,所以两个系统的内容是相同的。

在这里插入图片描述

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部