docker中使用Volume完成数据共享

情景概述

在一个docker中,部署两个MySQL容器,假如它们的数据都存储在自己容器内部的data目录中。这样的存储方式会有以下问题:

1.无法保证两个MySQL容器中的数据同步。

2.容器删除后,数据就会丢失。

基于以上问题,容器中的数据不能存储在容器内部。而是应该单独剥离出来,这时, Volume就派上用场了。

Volume是什么?

Volume就是在物理机上单独开辟的一个存储空间,以上面的情况为例,作为MySQL容器内部就不再进行数据存储。所有数据都存储在物理机的路径中,然后再通过Volume挂载到容器中,这样就形成了数据共享。两个MySQL容器共享同一份数据。当Volume数据变化,容器内部使用的时候就会跟随变化。

这样的方式可以解决多个容器数据共享和数据管理问题。

Volume使用案例

目标是启动三个tomcat容器实例,三个容器访问同一份文件,完成浏览器的访问。

当更改文件内容后,页面显示随之变化。

准备工作

1.需要先在docker中拉取tomcat镜像

docker pull tomcat

拉取tomcat镜像的作用是为页面访问提供中间件,关于tomcat更多操作,参考之前的文章:

Docker快速安装Tomcat-CSDN博客

2.将准备好的文件放到/usr/local路径下

webapps文件夹中的结构如下: 

index.html内容为:

I'm Volume Page??

创建容器并挂载数据卷

docker create --name webpage -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat /bin/true

创建一个名称为webpage的容器,容器基于tomcat镜像,只创建容器,但不运行。

-v 设置本地磁盘和容器内目录的对应关系(挂载数据卷),即/usr/local/webapps目录中的文件映射到/usr/local/tomcat/webapps目录中。

启动三个tomcat容器

docker run -p 8002:8080 --volumes-from webpage --name tomcat1 -d tomcat

docker run -p 8003:8080 --volumes-from webpage --name tomcat2 -d tomcat

docker run -p 8004:8080 --volumes-from webpage --name tomcat3 -d tomcat

启动一个名称为tomcat1的容器,容器基于tomcat镜像,这个容器外部访问端口为8002,对应到tomcat容器内部端口8080。

--volumes-from基于指定容器设置映射关系。

成功启动三个容器,容器名称分别是tomcat1、tomcat2、tomcat3

这三个容器因为都使用--volumes-from关键字设置了容器映射的路径,所以它们都对应到了物理机的/usr/local/webapps路径中。

查看容器挂载信息

docker inspect 容器编号

 

在输出结果中找到Mounts的节点,就可以看到挂载的信息。 

浏览器访问三个实例

访问三个端口,都可以正常显示。三个端口对应三个tomcat实例,通过Volume共享的方式,共享了同一份文件,这份数据是独立于容器的,在容器外部,只是通过命令进行了文件的映射。

这样做最大的好处是,当页面要进行修改操作,只需要改物理机上的文件就可以,不需要修改容器中的任何内容。

修改文件

下面进行演示,把index.html文件进行修改,然后再次访问。

 修改完文件后,需要重启容器。命令为:docker restart 容器ID或者容器名称

docker restart tomcat1

docker restart tomcat2

docker restart tomcat3

容器重启完毕后,再次访问tomcat实例

 

 

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

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

相关文章

【期末复习】二、进程管理

1.进程的内存结构🍊 程序加载到内存之后就变成了一个进程,进程在内存当中的一个结构有: 文本段(text section):存放程序代码 栈(stack):存放局部变量和函数返回地址 数据段(data section):存放全局变量和静态变量(static) 堆(heap):程序运行时的动态内存分…

Type-C多口适配器:高效充电与连接解决方案

在科技飞速发展的今天,我们的生活已经离不开各种各样的电子设备,如智能手机、平板电脑、智能手表和无线耳机等。这些设备不仅丰富了我们的数字生活,也带来了更多的充电需求。传统的单一充电口已经难以满足现代人对于便捷性和效率的追求&#…

UCAS 24秋网络认证技术 CH10 SSL 复习

TLS字段、参数含义要了解每个消息是什么意思 基本方式只验证服务端,服务端有证书,变形方式加上验证客户端TLS1.3区别 协商过程 背景 Record层使用的各种加密算法参数,均由Handshake协议协商获得。 具体过程 随机数交换 Client/Server相互…

支付宝商家转账到账户余额,支持多商户管理

大家好,我是小悟 转账到支付宝账户是一种通过 API 完成单笔转账的功能,支付宝商家可以向其他支付宝账户进行单笔转账。 商家只需输入另一个正确的支付宝账号,即可将资金从本企业支付宝账户转账至另一个支付宝账户。 该产品适用行业较广&am…

c# 中Parallel.ForEach 对其中一个变量进行赋值 引发报错

在 C# 中使用 Parallel.ForEach 方法时,如果你尝试在并行循环中对共享变量进行赋值,很可能会遇到线程安全问题或竞争条件(race conditions),这可能导致数据不一致、程序崩溃或其他不可预测的行为。 问题描述 假设你有…

基于Django的旅游信息管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着我国经济的高速发展与人们生活水平的日益提高,人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下,人们更趋向于足不出户解决生活上的问题,线上管理系统展现了其蓬勃生命力和广阔的前景。与此同时,随着…

常见的框架漏洞复现

1.Thinkphp Thinkphp5x远程命令执行及getshell 搭建靶场 cd vulhub/thinkphp/5-rce docker-compose up -d 首页 漏洞根本源于 thinkphp/library/think/Request.php 中method方法可以进行变量覆盖,通过覆盖类的核心属性filter导致rce,其攻击点较为多&…

UE5中实现右键开镜效果

右键之后添加时间轴,然后设置视野即可。Set Field Of View 时间轴设置,第一个点设置0,90度,因为默认的就是90度 第二个点看武器的类型或者倍境来设置,时间就是开镜时间,值越小开镜速度越快,第二个值就是视野…

关于华硕Armoury Crate(奥创中心)安装程序失败、卡进度条问题解决方案

关于华硕Armoury Crate(奥创中心)安装失败解决方案 清理旧版本文件 如果之前安装过Armoury Crate,可能有残留文件导致冲突: 利用官方的卸载工具,卸载旧版本: https://www.asus.com.cn/supportonly/armoury%20crate/…

iOS18 上的 Genmoji

在 WWDC 2025 期间,一种名为Genmoji的新型表情符号问世。 许多用户可能仍然不确定 Genmoji 是什么、它与传统表情符号有何不同、如何使用它以及如何恢复丢失的数据。因此,在本文中,我们将介绍您需要了解的有关 iOS 18 上的 Genmoji 的所有信…

基于等保的安全审计运维系统

摘要 本文研究与设计一种基于等级保护(等保)要求的安全审计运维系统,以适应日益严峻的网络安全形势和不断提高的安全审计需求。随着信息技术的快速发展和应用广泛,信息系统安全面临的威胁也在不断增加,特别是在关键信…

C# 设计模式(结构型模式):装饰器模式

C# 设计模式(结构型模式):装饰器模式 在软件开发中,面对需要扩展功能但又不想修改已有代码的情况时,装饰模式(Decorator Pattern)是一个非常有用的设计模式。装饰模式允许我们在不改变对象自身…

【OAuth2系列】如何使用OAuth 2.0实现安全授权?详解四种授权方式

作者:后端小肥肠 🍇 我写过的文章中的相关代码放到了gitee,地址:xfc-fdw-cloud: 公共解决方案 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 姊妹篇: 【OAuth2系列】集成微…

@Transcational注解为什么没有生效?

最近开发时遇到了需要使用事务的场景,之前的开发场景,都没有使用过事务,因此记录一下使用实践,以及踩坑。回想之前的开发经历,发现有一些场景是需要使用事务的,只不过当时开发经验有限,没想到使…

传感器与检测技术基础知识

传感器检测系统 检测系统的组成:传感器、信号调理、数握采集、信号处理、信号显示、信号输出、输入设备、稳压电源。 检测系统的基本误差分类:绝对误差、相对误差、引用误差,最大引用误差。 测量系统的误差分类:系统误差、随机误差、粗大误…

决定系数(R²分数)——评估回归模型性能的一个指标

目录 1.定义 2.计算举例 3. 结果分析 1.定义 R(R平方)分数,也称为决定系数,是用来评估回归模型性能的一个指标。它表示自变量解释因变量变异性的比例。R分数的取值范围通常在0到1之间,其值越接近1,说明…

stm32HAL库使LED闪烁

PC13引脚为开漏接法 生成代码时设置为out put open drain gpio out put level 设置为high 1表示熄灭 我们将pa9引脚连接为推挽接法 生成代码时设置为 out put push pull Gpio out put level 设置为low 0 表示熄灭 代码使其亮起再延时0.5秒再熄灭再延时0.5秒

对一个双向链表,从尾部遍历找到第一个值为x的点,将node p插入这个点之前,如果找不到,则插在末尾。使用C语言实现

以下是一个用C语言实现的双向链表&#xff08;Doubly Linked List&#xff09;插入操作的代码。该代码从尾部遍历找到第一个值为x的节点&#xff0c;并在其前插入新节点p&#xff0c;或者在未找到时将其插入链表末尾。 #include <stdio.h> #include <stdlib.h>// 定…

Linux(Centos 7.6)基础命令/常用命令说明

1.目录相关命令 命令命令说明pwd用于显示/打印当前目录位置。ls/ll 列出当前目录下的文件或者目录&#xff0c;ll是ls -l的别名&#xff0c;ls仅显示名称&#xff0c;ll会显示详细的目录文件信息。 cd目录切换&#xff0c;常见用法有&#xff0c;cd /切换到根目录&#xff0c;…

矩阵运算提速——玩转opencv::Mat

介绍:用Eigen或opencv::Mat进行矩阵的运算&#xff0c;比用cpp的vector或vector进行矩阵运算要快吗? 使用 Eigen 或 OpenCV 的 cv::Mat 进行矩阵运算通常比使用 std::vector<int> 或 std::vector<double> 更快。这主要有以下几个原因&#xff1a; 优化的底层实现…