Docker Swarm持久化

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:latesthostname: filebrowserports:- 8080:80deploy:mode: replicatedreplicas: 2volumes:- /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:latesthostname: filebrowserports:- 8080:80deploy:mode: replicatedreplicas: 3volumes:- 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:latesthostname: filebrowserports:- 8080:80deploy:mode: replicatedreplicas: 3volumes:- volume_filebrowser:/srv
volumes:volume_filebrowser:driver: localdriver_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,挂载的是同一个目录,所以两个系统的内容是相同的。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/25452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python-数字黑洞

[题目描述] 给定一个三位数,要求各位不能相同。例如,352是符合要求的,112是不符合要求的。将这个三位数的三个数字重新排列,得到的最大的数,减去得到的最小的数,形成一个新的三位数。对这个新的三位数可以重…

【数据结构】【版本1.0】【线性时代】——顺序表

快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、顺序表的概念1.1 最基础的数据结构:数组1.2 数组与顺序表的区别 二、静态顺序表三、动态…

error while loading shared libraries 找不到动态库问题如何解决

在使用 c 或 c 开发应用时,在启动程序时,有时会遇到这个错误,找不到动态库。这个时候,我们使用 ldd 来查看,发现可执行文件依赖的动态库显示为 not found。 1 实验代码 使用如下 3 个文件做实验。 hello.h 中声明了函…

【Vue】修改数量

文章目录 底部总价展示完整代码 注意:前端 vuex 数据,后端数据库数据都要 注册点击事件 页面中dispatch action 提供action函数 提供mutation处理函数 底部总价展示 提供getters 动态渲染 完整代码 main.js import Vue from vue import App from…

Linux:基础开发工具

文章目录 Linux 软件包管理器 yum什么是软件包关于rzsz查看软件包安装软件卸载软件安装扩展源 Linux 编辑器 vimvim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)底行模式(last line mode) vim的基本操作[命令模式]切换至[插入模式][插入模式]切换至[命令模…

【面经总结】Java基础 - 语言特性

参数传递 形参和实参的区别是什么? 形参:方法定义的参数 实参:调用方法实际传入的参数 Java是值传递还是引用传递? Java是值传递:将数据拷贝一份传递 基本参数类型:拷贝字面量引用类型(对象)&#xf…

【CW32F030CxTx StartKit开发板】开发资料

本来是参加21ic的评测活动,不知道为什么评测文章一直被提示有不良内容,所以只好先在此记录一下相关的资料。 此次测试的是CW32F030CxTxStartKit 评估板。该开发板为用户提供一种经济且灵活的方式使用 CW32F030CxTx 芯片构建系统原型,可进行性…

RV32I指令集

RV32I指令集 一、简介指令集总览:扩展指令集:提供整数乘法/除法(M)、原子操作(A)以及单精度(F)和双精度浮点(D)还有压缩指令集(C)内存:二、操作数相关常见操作数类型汇编代码分段文本段(text section)数据段(data section)BSS段三、RV32I寄存器基础指令格式立…

sm2证书生成(openssl3.0)

1、下载安装包 https://www.openssl.org/source/openssl-3.0.14.tar.gz 2、解压到指定位置 /appserver/openssl-3.0.14 3、安装依赖包 yum -y install gcc perl make zlib-devel perl-CPAN 4、编译 ./config shared --prefix/appserver/SM make depend make make install 5…

A52 STM32_HAL库函数 之 TIM通用驱动 -- B -- 所有函数的介绍及使用

A53 STM32_HAL库函数 之 TIM通用驱动 -- B -- 所有函数的介绍及使用 1 该驱动函数预览1.12 HAL_TIM_OC_DeInit1.13 HAL_TIM_OC_MspInit1.14 HAL_TIM_OC_MspDeInit1.15 HAL_TIM_OC_Start1.16 HAL_TIM_OC_Stop1.17 HAL_TIM_OC_Start_IT1.18 HAL_TIM_OC_Stop_IT1.19 HAL_TIM_OC_St…

Java学习-JDBC(三)

JDBC扩展 实体类和ORM 在使用JDBC操作数据库时,会发现数据是零散的,明明在数据库中是一行完整的数据,到了Java中变成一个个变量,不利于维护和管理,Java是面向对象的,一个表对应一个类,一行数据…

激活乡村振兴新动能:推动农村产业融合发展,打造具有地方特色的美丽乡村,实现乡村全面振兴

目录 一、推动农村产业融合发展 1、农业产业链条的延伸 2、农业与旅游业的结合 二、挖掘地方特色,打造美丽乡村 1、保护和传承乡村文化 2、发展特色农业 三、加强基础设施建设,提升乡村品质 1、改善农村交通条件 2、提升农村水利设施 四、促进…

使用【AbortController】终止请求

AbortController 是一个 Web API,用于终止一个或多个 Web 请求。当你使用 fetch API 发送异步请求时,你可能需要在某些情况下主动终止这些请求。使用 AbortController 可以实现这一功能。 基本用法: 创建一个 AbortController 实例: const co…

JavaEE——声明式事务管理案例:实现用户登录

一、案例要求 本案例要求在控制台输入用户名密码,如果用户账号密码正确则显示用户所属班级,如果登录失败则显示登录失败。实现用户登录项目运行成功后控制台效果如下所示。 欢迎来到学生管理系统 请输入用户名: zhangsan 请输入zhangsan的密…

吴恩达2022机器学习专项课程C2W2:2.23 选修_反向传播算法的工作原理(什么是导数图计算大型神经网络)

目录 引言一.导数的计算1.epsilon与导数的关系2.其它导数符号形式3.导数小结 二.小型神经网络的计算图1.什么是计算图(前向传播过程)2.反向传播计算过程3.验证反向传播的计算结果4.为什么用反向传播计算导数? 三.扩大神经网络的计算图1.计算反…

笔记本充电出现了问题。

不知道为什么。电池充电图片一直显示的空。谁能救救我!

C51学习归纳9 --- I2C通讯学习(重点)

首先,我自己学习过以后的直观感觉,通信协议是单片机的灵魂之一,只有规定好了通信协议我们才能够正确的接收到信息,才能实现更加深入的研究。所以这一部分是需要好好学习的。 本节借助一个可存储的芯片AT24C02,进行在I2…

docker国内被墙,有什么可以平替的公有云仓库?

目前有两个: 1、一个是红帽 quay.io 2、一个是Github的仓库 ghcr.io 红帽的不是那么全, Github的比较全,基本满足日常使用。

C语言怎样初始化图形模式?

一、问题 在C语⾔中,initgraph( ) 函数⽤于初始化图形模式。初始化时,那么多参数都是⼲什么的?怎样设置? 二、解答 initgraph( ) 函数⽤于初始化图形模式,其语法格式如下。 void far initgraph(int far * gdriver, i…

ACM算法学习路线、清单

入门 模拟、暴力、贪心、高精度、排序 图论 搜索 BFS、DFS、IDDFS、IDA*、A*、双向BFS、记忆化 最短路 SPFA、bellman-fort(队列优化)、Dijkstra(堆优化)、Johnson、Floyd、差分约束、第k短路 树 树的重心和直径、dfs序、树链刨分与动态树、LCA、Prufer编码及Cayley定理…