Docker进阶数据卷目录挂载及在线部署

前言

为了很好的实现数据保存和数据共享, Docker 提出了 Volume 这个概念,简单的说就是绕过默认的联合
文件系统,而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷

一. 数据卷介绍

Docker 中的数据卷(Volume)是用于持久化存储容器数据的一种机制。它可以将主机上的目录或文件与容器内的目录或文件进行关联,从而实现数据的共享和持久化。

使用数据卷可以实现以下几个方面的优势:

  1. 数据持久化:容器运行期间,数据卷中的数据可以被保留下来,即使容器被删除或重新创建,数据仍然可以被访问到。

  2. 数据共享:多个容器可以共享同一个数据卷,从而实现容器之间的数据共享。

  3. 数据备份与恢复:可以通过备份数据卷来实现容器数据的备份,然后在需要的时候恢复到其他容器中。

  4. 高性能访问:数据卷通常会比容器内部的文件系统性能更好,特别是对于大量读写操作的场景。

二. 数据卷挂载

1.数据卷操作

docker volume create v1  (v1为数据卷的名称)

 1.1查看数据卷

docker volume ls

1.2 删除数据卷

docker volume rm v1(数据卷名称)

 1.3 查看所有数据卷

docker volume ls

1.4 查看数据卷信息

docker volume inspect v1(数据卷名称)

 1.5 docker容器挂载数据卷

docker run -it \
--name c1 \
--mount source=v1,target=/testdir \
centos

注:c1为容器名字,v1为挂载的数据卷,target=/***是指在创建时指定创建一个名为***的目录,在我们为某个容器挂载数据卷时只有在容器创建时才能为它进行挂载,当前命令指创建一个名为c1的容器并为它指定的数据卷为v1,挂载的目录为testdir(当前名字可以任意,在创建容器时会自动创建该目录)

4.数据卷共享

当我们在进行挂载数据卷时,可以不同容器指定同一数据卷,只需要将容器名更改即可,我们不管在哪个容器进行操作,都会同时共享一个数据卷 

小结

容器和数据卷是两个独立的不同的模块,当我们操作容器时,例如删除,不会影响数据卷,数据卷依然存在,当我们下次创建数据卷时依然可以挂载

小实战(将war包挂载到数据卷中并运行在Tomcat) 

1.找到数据卷路径

查看所有数据卷

docker volume ls

查看指定数据卷信息(v1为数据卷名称)

docker inspect v1

2.cd 进入当前目录

将提前准备好的测试war包拖到当前目录下

 3.创建容器将war包挂载到当前容器中

docker run -itd \
--name t1 \
-p 8080:8080 \
--mount source=v1,target=/usr/local/tomcat/webapps \
tomcat:8.5.20

注意:当前命令是将我们的数据卷目录替换掉当前目录/usr/local/tomcat/webapps,也就是将当前目录中的文件全部替换成数据卷目录文件使它们数据保持一致

这里我们可以回到自己的windows,在浏览器中利用IP/项目名 进行访问

访问成功后说明项目成功挂载到数据卷中并运行成功

三.目录挂载

1.创建目录

创建目录并进入

mkdir soft
cd soft

2.创建容器并挂载当前目录

docker run -itd \
--name t1 \
-v /soft/oapro.war:/usr/local/tomcat/webapps/oapro.war \
-p 8080:8080 \
tomcat:8.5.20

在上面的命令中soft将webapps直接替换了,等于进行了一个重新命名,-v 既可以挂载目录
-v 还可以单独挂载文件

 四.Tomcat在线部署

实现思路:通过将修改好的配置文件挂载到目录中,然后通过当前的用户名密码进入到当前系统中的Tomcat实现在线部署

1.将配置文件上传到虚拟机中

在我们的本机Windows中的tomcat文件夹中找到conf/tomcat-users.xml文件(用户信息文件),并将其上传到刚刚虚拟机上创建的soft文件夹

示例:

 再将Tomcat中的webapps\manager\META-INF\context.xml进行上传

示例

2.修改配置文件

双击进入tomcat-users.xml,我们在当前文件位置加入以下代码,修改完成后保存并退出

注意:下面的password那一栏需要修改为自己的密码

<role rolename="manager-gui"/>
<user username="tomcat" password="自己的密码" roles="manager-gui"/>

然后双击进入到我们的context.xml文件,将下面示图的部分进行注释(一般是没有注释的),修改完成后保存并退出

 3.将配置文件挂载到目录中

docker run -itd \
--name t1 \
-v /soft/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml \
-v /soft/context.xml:/usr/local/tomcat/webapps/manager/META-INF/context.xml \
-p 8080:8080 \
tomcat:8.5.20

注:tomcat-users.xml为自己的刚刚上传的用户信息文件的文件名,/usr/local/tomcat/conf/tomcat-users.xml为要替换的当前虚拟机中Tomcat的tomcat-users.xml文件,context.xml同理

4.在线部署

进入管理页进行在线部署

 登录输入自己的用户名和密码进入(用户名一般为tomcat)

登录进入后上传war包即实现在线部署

报错解决

 1.Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/soft/tomcat-users.xml" to rootfs at "/usr/local/tomcat/conf/tomcat-users.xml": mount /soft/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml (via /proc/self/fd/7), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
Error: failed to start containers: t

原因:路径参数不正确,检查自己的文件路径名,soft是否在根路径

2.

docker: Error response from daemon: Conflict. The container name "/t1" is already in use by container "c7e532fc6407996f987f41f88ef2661dd054d9a74ad0b0effd728345680e8ef9". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.

原因:容器重复,删除之前的容器名相同的容器,或者创建时换一个名称 

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

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

相关文章

18_类加载

文章目录 类加载器类加载时机Java代码的3个阶段 反射关于Class配置文件(.properties)Properties类通过反射获取构造方法(Constructor)通过反射获取成员变量(Field)通过反射获取成员方法(Method) 其他API自定义类加载器反射的应用 类加载器 分类&#xff1a; Bootstrap ClassLo…

flutter 文件下载及存储路径

flutter 文件下载及存储路径 前言一、下载进度条二、文件路径二、文件上传总结 前言 日常开发中&#xff0c;经常会遇到下载文件的功能&#xff0c;往往我们在需要保存文件的路径上去调试&#xff0c;比如Android中的路径&#xff0c;有些会报错在SD卡中&#xff0c;但是有些手…

iOS 调试工具CocoaDebug

1、使用pod工具在项目里面添加CocoaDebug的SDK。 platform :ios, 11.0target ShopService doproject ShopServiceuse_frameworks!pod CocoaDebug, :configurations > [Debug]end2、之后就可以在项目里面看到效果了 APP上显示的是一个黑色背景的小圆圈。 上面39表示调用了39…

研究了Web版Photoshop,提升自己=提升价值

Adobe 发布了Web版 Photoshop&#x1f517;&#xff0c;它是使用 WebAssembly、web components、P3 颜色等 Web 技术构建的。本文就来研究一下网页版 Photoshop 上有趣又有用的 CSS 知识&#xff01; Photoshop 旧 Logo 首先&#xff0c;在浏览器控制台中使用了 Photoshop 的 …

揭秘虾皮API接口:开启电商开发新篇章,引领业务增长潮流

虾皮API接口技术详解 一、概述 虾皮API接口是虾皮电商平台为开发者提供的一套应用程序接口&#xff0c;允许第三方开发者通过编程方式访问虾皮平台上的商品、订单、用户等数据&#xff0c;并执行相关操作。通过使用虾皮API接口&#xff0c;开发者可以快速构建与虾皮平台集成的…

2024-1-12 关于SVPWM的理解疑问

直流母线电压利用率是指逆变电路(电机控制器)所能输出的交流电压基波最大幅值U1m和直流母线电压之比。 电压利用率 SVPWM算法理解(二)——关于非零基本矢量幅值和线电压幅值的解释 因此我们在实际应用中提供的直流侧电压Udc,应该大于等于所需要输出的三相相电压幅值的√…

基于springboot+vue的网上花卉商城系统(Java毕业设计)

大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的方法。无论你是…

公司寄快递教程

公司寄快递用哪个更划算&#xff1f;这个问题有最优解吗&#xff1f;恐怕没有......很简单&#xff0c;回答这个问题之前&#xff0c;我们先来看看公司寄快递的背景。 一、大背景 所谓的大背景是由国内快递行业的发展现状所决定的。众所周知&#xff0c;这十年来&#xff0c;国…

SpringBoot 源码解析4:refresh 方法解析

SpringBoot 源码解析4&#xff1a;refresh 方法解析 1. refresh 方法解析2. 准备刷新 AbstractApplicationContext#prepareRefresh3. 获取bean工厂 AbstractApplicationContext#obtainFreshBeanFactory4. 准备bean工厂 AbstractApplicationContext#prepareBeanFactory5. Servle…

React项目搭建流程

第一步 利用脚手架创建ts类型的react项目&#xff1a; 执行如下的命令&#xff1a;create-react-app myDemo --template typescript &#xff1b; 第二步 清理项目目录结构&#xff1a; src/ index.tsx, app.txs, react-app-env.d.ts public/index.ht…

教程-右键用vscode(新窗口)打开文件或目录

通过本文可以提高效率&#xff0c;用起来更爽更高效。 本文实现了&#xff08;windows系统&#xff09;&#xff1a; 右键-用vscode(当前窗口)打开文件或目录右键-用vscode-新窗口打开文件或目录 注意&#xff1a; 下面的安装路径要更改为您实际的路径 具体配置步骤&#x…

一键转换,创新无限:将HTML轻松转化为PDF!

在数字时代&#xff0c;HTML与PDF已成为信息传递的两大主流格式。然而&#xff0c;在这两者之间转换常常让人感到困扰。现在&#xff0c;有了我们的创新工具&#xff0c;您只需轻点一下&#xff0c;即可一键将HTML转化为PDF&#xff01; 首先&#xff0c;我们要进入首助编辑高…