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

2023-09-19 09:39:52

一、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目录下

更多推荐

阿里云无影云电脑角色AliyunServiceRoleForGws什么意思?

阿里云无影云电脑服务关联角色是指角色名称:AliyunServiceRoleForGws,并赋予角色权限策略:AliyunServiceRolePolicyForGws的过程,简单来说,就是允许无影云电脑服务访问您VPC、CEN和NAS中的资源,使用该权限查询实例,管理无影云电脑办公网络。创建无影云电脑之前需要先为无影

ELK 企业级日志分析系统

目录1、ELK概述1.1ELK简介1.2为什么要使用ELK1.3完整日志系统基本特征1.4ELK的工作原理2、ELKElasticsearch集群部署(在Node1、Node2节点上操作)2.1环境准备2.2部署Elasticsearch软件2.3安装Elasticsearch-head插件3、ELKLogstash部

【QT】day2

1.完善登录框点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个按钮ok和cancel,点击ok后,会清除密码框中的内容,继续进行登录;如果点击cancel按钮,则关闭界面。如果账号和密码匹配,则弹出信息对话框,给出提

spring 拦截器

Spring拦截器是在处理请求的过程中,可以在特定的时机对请求进行一些处理,比如记录日志、进行权限校验、统计请求时间等。实现步骤:创建一个拦截器类,实现HandlerInterceptor接口,并重写其方法。在Spring配置文件中添加拦截器配置,可以配置拦截的URL,也可以对所有URL进行拦截。在拦截器的方法中编写拦

API(十)时间相关的SDK

一时间相关的SDK①时间记录的必要性1、'案发'现场的时间点2、通过时间判断'性能'3、时间的'不准确'性,日志'落盘'时间-->'缓冲区'导致延迟②使用哪些日期和时间的函数1、lua标准'时间'函数,函数'os.time'、'os.date'和'os.difftime'提供了所有日期和时间2、在openresty的世

vue3硅谷甄选01 | 使用vite创建vue3项目及项目的配置 环境准备 ESLint配置 prettier配置 husky配置 项目集成

文章目录使用vite创建vue3项目及项目的配置1.环境准备2.项目配置ESLint校验代码工具配置-js代码检测工具1.安装ESLint到开发环境devDependencies2.生成配置文件:`.eslint.cjs`**3.安装vue3环境代码校验插件**4.修改.eslintrc.cjs配置文件5.生成ESLi

接口自动化测试框架搭建全部过程

思想:1、基本目录的搭建report:静态输出目录(报告或者日志)data:静态输入目录(可以存放Excel数据,被读取的一些数据)utils:实用方法层(这里存放的是项目的公共方法,一般拿到别的项目可以直接使用,列如:读取Excel中的数据,连接数据库,)apis:接口请求层(这里封装的方法一般都是和项目有关系,列如

MySQL 权限分配

有时候,您需要查看某个用户被授予的权限以便复核。MySQL允许您使用SHOWGRANTS语句来显示分配给用户帐户或角色的权限。MySQLSHOWGRANTS语句介绍以下是SHOWGRANTS语句的基本语法:SHOWGRANTS[FOR{user|role}[USINGrole[,role]...]]在这个语法中:首先,

记录一次DLL分析实战

记录一次DLL分析实战1.VT查看分析报告2.判断文件是否加壳3.查看导入函数4.查看是否有任何其他文件或基于主机的迹象5.使用工具IDAPro进行字符串分析1.VT查看分析报告virustotal全绿,没有报毒:可以看到这个dll是32位的:下面可以看它调用的其他dll:以及它对外提供的函数接口:其中RunCmd很可

Redis简介

1.Nosql作用:应对基于海量用户和海量数据前提下的数据处理问题。​常见Nosql数据库:​RedismemcacheHBaseMongoDB​特征:可扩容,可伸缩,大数据量下高性能,灵活的数据模型,高可用2.Redis特征:1.数据间没有必然的关联关系2.内部采用单线程机制进行工作3.高性能。官方提供测试数据,50

OceanBase杨传辉传递亚运火炬:国产数据库为“智能亚运”提供稳稳支持

9月14日,亚运火炬传递到了浙江台州,OceanBase的CTO杨传辉作为火炬手交接了第89棒火炬。2010年,杨传辉作为创始成员之一参与自研原生分布式数据库OceanBase。十年磨一剑,国产数据库OceanBase交出了一张优秀的成绩单:连续10年稳定支撑双11,承受住了世界级的流量洪峰和稳定性考验;刷新过TPC-

热文推荐