当前位置: 首页 > article >正文

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.kler.cn/a/470432.html

相关文章:

  • 搭建企业AI助理的创新应用与案例分析
  • 信息系统管理师试题-人力资源
  • 统计字符【2】(PTA)C语言
  • GitLab 创建项目、删除项目
  • 在 .Net 8.0 中使用 AJAX 在 ASP.NET Core MVC 中上传文件
  • 如何在centos中进行有效的网络管理
  • ESP32物联网无线方案,智能穿戴设备联网通信,产品无线交互应用
  • 从入门到精通:Ansible Shell 模块的应用与最佳实践
  • 智慧工地解决方案深度解析:统一架构平台,十大产品线与AI+智慧工地产品趋势
  • 微服务中任务失败后如何进行重试
  • 嵌入式硬件设计的基本流程
  • 从git分支获取一个新项目
  • Swift Concurrency(并发)学习
  • 在环境冲突情况下调整优先级以解决ROS Catkin构建中缺少模块的问题【ubuntu20.04】
  • Outlook 网页版一直提示:检测到重复的重定向
  • Selenium 的四种等待方式及使用场景
  • C# 检查一个字符串是否是科学计数法格式字符串 如 1.229266E+01
  • Requests聚焦爬虫-数据解析
  • 项目48:简易语言学习助手【源代码】 --- 《跟着小王学Python·新手》
  • 线程的创建与管理:Java的多重身份
  • 【React】刷新页面或跳转路由时进行二次确认
  • 【问题记录】SpringBoot 解决 getReader() has already been called for this request 错误
  • F#语言的计算机基础
  • HTML - <link>
  • 03、MySQL安全管理和特性解析(DBA运维专用)
  • Python:类方法、实例方法与静态方法深度解析(补)