Docker Swarm持久化

Docker Swarm持久化

1 简介

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

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

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

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

序号 主机名 IP 备注
1 master 192.168.108.201
2 node1 192.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,挂载的是同一个目录,所以两个系统的内容是相同的。

在这里插入图片描述

相关推荐

  1. 持久存储 StorageClass

    2024-06-10 13:40:02       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-10 13:40:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-10 13:40:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-10 13:40:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-10 13:40:02       18 阅读

热门阅读

  1. 爬山算法详细介绍

    2024-06-10 13:40:02       9 阅读
  2. 爬山算法的详细介绍

    2024-06-10 13:40:02       9 阅读
  3. 检测数据类型的方法有哪些

    2024-06-10 13:40:02       6 阅读
  4. 详细说说机器学习在交通领域的应用

    2024-06-10 13:40:02       7 阅读
  5. web前端微服务设计:深入剖析与实践

    2024-06-10 13:40:02       7 阅读
  6. spring和Mybatis的各种查询

    2024-06-10 13:40:02       12 阅读
  7. linux 触屏, 旋转后配置pen

    2024-06-10 13:40:02       9 阅读
  8. github的个人readme文件

    2024-06-10 13:40:02       8 阅读
  9. C#进阶高级语法之LINQ

    2024-06-10 13:40:02       7 阅读
  10. #11 提升效率:Stable Diffusion批处理技术

    2024-06-10 13:40:02       6 阅读