Docker容器数据持久化存储机制

news2025/4/19 18:30:49

这里写目录标题

  • 一、Docker容器数据持久化存储介绍
  • 二、Docker容器数据持久化存储方式
  • 三、Docker容器数据持久化存储方式应用案例演示
    • 3.1 docker run -v
      • 3.1.1 创建了本地目录
      • 3.1.2 未创建本地目录
    • 3.2 volumes
      • 3.2.1 创建数据卷
      • 3.2.2 使用数据卷

一、Docker容器数据持久化存储介绍

物理机或虚拟机数据持久化存储

  • 由于物理机或虚拟机本身就拥有大容量的磁盘,所以可以直接把数据存储在物理机或虚拟机本地文件系统中,亦或者也可以通过使用额外的存储系统(NFS、GlusterFS、Ceph等)来完成数据持久化存储。

Docker容器数据持久化存储

  • 由于Docker容器是由容器镜像生成的,所以一般容器镜像中包含什么文件或目录,在容器启动后,我们依旧可以看到相同的文件或目录。

  • 由于Docker容器属于"用后即焚”型计算资源,因此Docker容器不适合做数据持久化存储

二、Docker容器数据持久化存储方式

Docker提供三种方式将数据从宿主机挂载到容器中:

  • docker run -v

    • 运行容器时,直接挂载本地目录至容器中
  • volumes

    • Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)
    • 是Docker默认存储数据方式
  • bind mounts

    • 将宿主机上的任意位置文件或目录挂载到容器中

三、Docker容器数据持久化存储方式应用案例演示

3.1 docker run -v

3.1.1 创建了本地目录

nginx下新建index.html文件,并且定义内容

root@hecs-213321:~/Docker/nginx# ls
index.html
root@hecs-213321:~/Docker/nginx# cat index.html 
<h1>今天是9月9日</h1>

启动容器
-v ./nginx/:/usr/share/nginx/html/:将宿主机中的nginx目录下的文件挂载到容器中的/usr/share/nginx/html/目录下

root@hecs-213321:~/Docker# docker run -d --name web -v ./nginx/:/usr/share/nginx/html/ nginx:latest

查看容器

root@hecs-213321:~/Docker# sudo docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
e3e2107bf3fc   nginx:latest   "/docker-entrypoint.…"   58 seconds ago   Up 56 seconds   80/tcp    web

查看容器的IPAddress

root@hecs-213321:~/Docker/nginx# docker inspect web

访问

root@hecs-213321:~/Docker/nginx# curl http://172.17.0.2
<h1>今天是9月9日</h1>

把容器删掉

root@hecs-213321:~/Docker/nginx# docker stop web
web
root@hecs-213321:~/Docker/nginx# docker rm web
web

发现宿主机中的文件还在

root@hecs-213321:~/Docker# cd nginx/
root@hecs-213321:~/Docker/nginx# ls
index.html

当重新运行容器时,容器中的/usr/share/nginx/html/目录下还会存在index.html文件

root@hecs-213321:~/Docker/nginx# docker run -d --name web -v ./nginx/:/usr/share/nginx/html/ nginx:latest
7559987e00f184fb96ce136149e864197bbbe5366930f93d85fad6222ba363ab

当在容器中的挂载的文件发生变化,宿主机中挂载的文件也将发生变化。

root@hecs-213321:~/Docker/nginx# sudo docker exec -it web /bin/sh

修改容器中的文件内容

# cd /usr/share/nginx/html

# echo '66666'>index.html
# cat index.html
66666

宿主机中的文件内容也将发生变化

root@hecs-213321:~/Docker/nginx/nginx# cat index.html
66666

同样的,当在宿主机中的挂载的文件发生变化,容器中挂载的文件也将发生变化。

3.1.2 未创建本地目录

运行容器

root@hecs-213321:~# docker run -d --name web1 -v ./web1root/:/usr/share/nginx/html/ nginx:latest

查看运行中的容器

root@hecs-213321:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
6f631e440db1   nginx:latest   "/docker-entrypoint.…"   31 seconds ago   Up 30 seconds   80/tcp    web1
7559987e00f1   nginx:latest   "/docker-entrypoint.…"   34 minutes ago   Up 34 minutes   80/tcp    web

查看web1容器的IPAddress

docker inspect web1

访问,报403

curl http://172.17.0.3

原因是该目录下没有文件

root@hecs-213321:~# ls
Docker  snap  web1root
root@hecs-213321:~# cd web1root/
root@hecs-213321:~/web1root# ls

创建index.html文件,并且新加内容,再次访问即可访问成功

root@hecs-213321:~/web1root# echo 'web1' > index.html
root@hecs-213321:~/web1root# curl http://172.17.0.3
web1

3.2 volumes

3.2.1 创建数据卷

docker volume create nginx-volume

查看数据卷

root@hecs-213321:~# docker volume ls
DRIVER    VOLUME NAME
local     9b4315d9adb4ce6677921ea040e3f9180c325230aa8cd8cdfa8fac754318473f
local     nginx-volume

查看数据卷详情

root@hecs-213321:~# docker inspect nginx-volume
[
     {
        "CreatedAt": "2023-09-09T11:45:17+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/nginx-volume/_data",
        "Name": "nginx-volume",
        "Options": null,
        "Scope": "local"
    }
]

3.2.2 使用数据卷

-- mount:指定使用自己创建的volume
src=nginx-volume:指定使用那个数据卷
dst:指定挂载到容器中的具体位置

root@hecs-213321:~# docker run -d --name web3 --mount src=nginx-volume,dst=/usr/share/nginx/html/ nginx:latest
231aa656b24d2e189e0f340df7447fcc0db96cbdc530e060fa7bdd52799e1b50
root@hecs-213321:~# ls

查看容器详细信息,并且访问

root@hecs-213321:~# docker inspect web3

并没有报403
上面的操作中创建容器的时候使用 -v 会报403

创建的数据卷,默认存储在/var/lib/docker/volumes/nginx-volume/_data目录下

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

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

相关文章

Dynaform 7.0安装说明教程

Dynaform 7.0安装说明教程 1.安装ANSYS License Manager 2023R2 2.用有裂纹的程序文件夹覆盖原始<ANSYS Inc>程序文件夹&#xff08;默认设置为&#xff1a;C:\program Files\ANSYS Inc&#xff09; 3.运行程序>ANSYS&#xff0c;股份有限公司许可管理器>ANSYS许…

安装封箱机需要的条件

任何设备的安装都需要一定的场地条件&#xff0c;封箱机产品也不例外&#xff0c;对于初次使用封箱机的用户&#xff0c;我们会仔细提醒客户需要准备的条件&#xff0c;今天就把这些条件和大家分享一下&#xff0c;方便您今后更方便的使用封箱机产品。 1、适当的场地。用户在购…

【C++】C++11——构造、赋值使用条件和生成条件

移动构造和移动赋值生成条件移动构造和移动赋值调用逻辑强制生成默认函数的关键字default禁止生成默认函数的关键字delete 移动构造和移动赋值生成条件 C11中新增的移动构造函数和移动赋值函数的生成条件为&#xff1a; 移动构造函数的生成条件&#xff1a;没有自己实现的移动…

Redis GEO 类型与 API 结合,地理位置优化的绝佳实践

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

Linux下的网络编程——网络基础、socket编程(一)

前言&#xff1a; 前面我们学习了Linux的系统编程&#xff0c;从今天我们就要开始Linux网络编程的学习了&#xff0c;Linux网络编程中的知识点可能没有前面的Linux系统多一点&#xff0c;但是基础的网络知识我们还是需要了解的&#xff0c;并且网络编程中的socket编程的知识也…

打赏收款收银台多合一支付收款HTML源码

多合一打赏支付收款&#xff08;微信、QQ、支付宝&#xff09; 源码直接上传到服务器解压缩即可访问,或者用本地浏览器打开访问 PS&#xff1b;只需要将自己的收款二维码替换即可 该源码全开源无加密&#xff0c;所有操作均在本地无需调用外部资源防止失效&#xff01; 源码…

微前端架构的几种技术选型

微前端架构的几种技术选型随着SPA大规模的应用&#xff0c;紧接着就带来一个新问题&#xff1a;一个规模化应用需要拆分。 一方面功能快速增加导致打包时间成比例上升&#xff0c;而紧急发布时要求是越短越好&#xff0c;这是矛盾的。另一方面当一个代码库集成了所有功能时&am…

【校招VIP】java语言考点之反射

考点介绍&#xff1a; java的反射(reflection)机制是指在程序的运行状态中&#xff0c;可以构造任意一个类的对象&#xff0c;可以了解任意一个对象所属的类&#xff0c;可以了解任意一个类的成员变量和方法&#xff0c;可以调用任意一个对象的属性和方法。这种动态获取程序信息…

探索工业路由器如何助力无人驾驶方案的突破性解析

随着无人驾驶技术的发展&#xff0c;越来越多的企业和组织开始部署无人驾驶车辆来提高运输效率和安全性。在这些方案中&#xff0c;工业路由器被广泛应用于建立稳定、安全和高效的通信网络。在本篇文章中&#xff0c;我们将分享一个真实的无人驾驶方案部署案例&#xff0c;其中…

laravel设置与获取header请求头

laravel设置与获取header请求头 设置 <?phpnamespace App\Http\Controllers\Text;use Illuminate\Http\Request; use App\Http\Controllers\Controller;class TextController extends Controller {public function TextCC(Request $request){$token $request->header(j…

【函数进阶】

函数进阶 1 本节目标2 函数的定义和调用2.1 函数的定义方式2.2 函数的调用方式 3 this3.1 函数内 this 的指向3.2 改变函数内部 this 的指向3.2.1 call方法3.2.2 apply方法3.2.3 bind方法3.2.4 call apply bind 总结 4 严格模式4.1 什么是严格模式4.2 开启严格模式4.2.1 为脚本…

【校招VIP】交流技巧之面试时合理表达观点

考点介绍&#xff1a; 交流和表达是产品的面试最重要的考查点之一&#xff0c;也是产品必备工作技能。如果在面试中不能合理的与面试官沟通&#xff0c;或者不能把自己的思路和分析有逻辑的表达出来&#xff0c;都会对面试结果产生不好的影响。 交流技巧之面试时合理表达观点-…

【网络协议】Http-下

因为Http是无状态的&#xff0c;所以为了协助 Web 保持状态&#xff0c;Cookie 诞生了。 下面中是百度百科关于Cookie和Session的解释&#xff1a; Cookie&#xff1a;举例来说, 一个 Web 站点可能会为每一个访问者产生一个唯一的ID, 然后以 Cookie 文件的形式保存在每个用户的…

序列化 qmap

自定义的map不得行 但是qmap可以自己分配具体内存 这里没照完 待会照

通讯网关软件009——利用CommGate X2MQTT实现MQTT访问ODBC数据源

本文介绍利用CommGate X2MQTT实现MQTT访问ODBC数据源。CommGate X2MQTT是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;实现上位机通过MQTT来获取ODBC数据源的数据。 【解决方案】设置网关机…

「Qt中文教程指南」如何创建基于Qt Widget的应用程序(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文描述了如何使用…

【Java 并发编程】CopyOnWriterArrayList 详解

CopyOnWriterArrayList 详解 1. ArrayList1.1 ArrayList 和 LinkedList 的区别1.2 ArrayList 如何保证线程安全 2. CopyOnWriteArrayList 原理3. CopyOnWriteArrayList 的优缺点3.1 优点3.2 缺点 4. 源码分析4.1 两个成员变量4.2 构造函数4.3 add(E e)4.4 add(int index, E ele…

(总目录)springboot - 实现zip文件上传并对zip文件解压, 包含上传oss

全文目录,一步到位 1.本文概述1.1 本文简介 2. 功能实现2.1 统一文件校验2.2 普通(多)文件上传[服务器]2.2.1 controller层2.2.2 service层2.2.3 业务impl实现类2.2.4 FileIOUtils工具包代码 2.3 zip文件的解压2.4 图片文件的压缩2.5 oss文件后端上传2.6 oss文件前端上传2.7 后…

传统企业如何实现数字化转型?

传统企业实现数字化转型是一个复杂且多方面的过程&#xff0c;涉及将数字技术和战略融入业务的各个方面&#xff0c;以推动创新、效率和竞争力。以下是传统企业实现数字化转型可以遵循的步骤和策略&#xff1a; 1.领导层的认可和愿景&#xff1a; 首先要确保最高领导层&#x…

SpringCloud Gateway搭建Gateway 微服务应用实例

&#x1f600;前言 本篇博文是关于SpringCloud Gateway搭建Gateway 微服务应用实例&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您…