容器数据持久化

2023-11-19

一、挂载方式

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

  • volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。
  • bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。
  • tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用tmpfs,同时避免写入容器可写层提高性能。

在这里插入图片描述


二、Volume

#管理卷: 
docker volume ls
docker volume create nginx-vol 
docker volume inspect nginx-vol 

#用卷创建一个容器: 
docker run -d --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx   
docker run -d --name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx

【说明】
1、--mount 和 -Vd都是挂载,只是版本不同用法不同
2、nginx-vol是创建的数据卷
3、/usr/share/nginx/html是容器的数据目录文件挂在到数据卷的路径。

#清理: 
docker stop nginx-test                     #停止容器nginx-test
docker rm nginx-test                       #删除容器nginx-test
docker volume rm nginx-vol                 #删除数据卷nginx-vol
1、挂载
docker run -d --name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx

验是否挂在成功:

#查看数据nginx-vol
[root@master ~]# docker volume inspect nginx-vol
[
    {
        "CreatedAt": "2021-08-16T14:41:40+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/data/docker/volumes/nginx-vol/_data",
        "Name": "nginx-vol",
        "Options": {},
        "Scope": "local"
    }
]

#查看数据卷挂载目录下文件
[root@master ~]# ls /data/docker/volumes/nginx-vol/_data
50x.html  index.html

#登陆容器查看nginx容器文件是否对应
[root@master ~]# docker exec -it nginx-test /bin/bash
root@cdb030d9759e:/# ls /usr/share/nginx/html/
50x.html  index.html
2、没有指定卷,自动创建卷

操作:

#查看数据卷
[root@master ~]# docker volume ls
DRIVER              VOLUME NAME
local               nginx-vol

#将/usr/share/nginx/html挂载到nginx-vol-2卷上
[root@master ~]#  docker run -d --name=nginx-test2 -v nginx-vol-2:/usr/share/nginx/html nginx
e21b66dcc719eca2ed09b15266e39c9a6835d5ae061788936159a218119425d2

#发现自动生成卷nginx-vol-2
[root@master ~]# docker volume ls
DRIVER              VOLUME NAME
local               nginx-vol
local               nginx-vol-2

3、删除容器、卷是否存在

验证

#登陆nginx-test
[root@master ~]# docker exec -it nginx-test /bin/bash

#修改发布目录
root@cdb030d9759e:/# echo "jiawenchao" >/usr/share/nginx/html/index.html
root@cdb030d9759e:/# exit
exit

#查看ngixn-test的IP
[root@master ~]# docker inspect nginx-test |grep -i ipaddr
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.6",
                    "IPAddress": "172.17.0.6",

#访问IP地址,确认修改。
[root@master ~]# curl  172.17.0.6
jiawenchao

#查看数据卷是否变动
[root@master ~]# cat /data/docker/volumes/nginx-vol/_data/index.html
jiawenchao

#删除容器nginx-test
[root@master ~]# docker rm -f nginx-test
nginx-test

#重新启动新容器
docker run -d --name=jiawenchao -v nginx-vol:/usr/share/nginx/html nginx

#查看容器jiawenchao的IP地址
[root@master ~]# docker inspect jiawenchao |grep -i ipaddr
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.6",
                    "IPAddress": "172.17.0.6",

#访问发现还是之前的数据
[root@master ~]# curl 172.17.0.6
jiawenchao

二、Bind Mounts

1、宿主机目录映射
#用卷创建一个容器: 
 docker run -d --name=wenchao --mount type=bind,src=$PWD/wwwroot,dst=/usr/share/nginx/html nginx 
 docker run -d --name=wenchao  -v $PWD/wwwroot:/usr/share/nginx/html  nginx
 
 【说明】
 1、$PWD/wwwroot             #宿主机上的目录路径,有则直接使用、无则自动创建。
 2、/usr/share/nginx/html    #容器本身需要被映射数据路径

验证:

#启动一个容器wenchao
[root@master ~]#  docker run -d --name=wenchao  -v $PWD/wwwroot:/usr/share/nginx/html  nginx

#查看IP
[root@master ~]# docker inspect wenchao |grep -i ipaddr
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.8",
                    "IPAddress": "172.17.0.8",

#访问报错403,原因是没有数据也没有网页
[root@master ~]# curl  172.17.0.8
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.21.1</center>
</body>
</html>

#导入“hello wrod"html发布目录,并放到/wwwroot/下
[root@master ~]# echo "hello wrod" > wwwroot/index.html

#再次访问发现hello word
[root@master ~]# curl  172.17.0.8
hello wrod

注意:

  • 如果源文件/目录没有存在,不会自动创建,会抛出一个错误。
  • 如果挂载目标在容器中非空目录,则该目录现有内容将被隐藏。

三、总结知识点

【挂载官网】https://docs.docker.com/storage/bind-mounts/

Volume特点:

  • 多个运行容器之间共享数据,多个容器可以同时挂载相同的卷。
  • 当容器停止或被移除时,该卷依然存在。
  • 当明确删除卷时,卷才会被删除。
  • 将容器的数据存储在远程主机或其他存储上(间接)
  • 将数据从一台Docker主机迁移到另一台时,先停止容器,然后备份卷的目录(/var/lib/docker/volumes/)

Bind Mounts特点

  • 从主机共享配置文件到容器。默认情况下,挂载主机/etc/resolv.conf到每个容器,提供DNS解析。
  • 在Docker主机上的开发环境和容器之间共享源代码。例如,可以将Maven target目录挂载到容器中,每次在Docker主机上构建Maven项目时,容器都可以访问构建的项目包。
  • 当Docker主机的文件或目录结构保证与容器所需的绑定挂载一致时

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

容器数据持久化 的相关文章

随机推荐

  • 计算机勾兑双绝是谁发明,勾兑大师范玉平之“舌尖上的五粮液”

    1958年 那是一个热火朝天的时代 在五粮液酒厂的仓库里 人们总能看到一位斯斯文文的小伙子 在一阵阵紧张的收货发货后 不紧不慢地将那些大大小小的酒坛收拾得整整齐齐 之后他便一边对着账本 一边慢条斯理地抿着小酒 尽管他手中的酒杯里常常只有半杯
  • 网页是如何显示在浏览器

    这两天学习了一些网页如何在浏览器中显示的知识 感觉在我向前端走的路上非常有用 所以就在这里总结一下 大家可以看看 我也算是巩固一下知识 因为自己学识太浅 内容可能有一些错误之处 希望看到的朋友可以指出来啦 在Edge浏览器也加入Chromi
  • 低投入也有高效率!Fortinet 安全 SD-WAN方案赋能金融保险行业

    当前 金融保险等行业进入数字化转型的快速发展阶段 数字化效能不断提升的同时 也对广域网等基础IT建设提出了更高的需求 某保险公司在全国的省级分公司和多级分支机构多达上百家 近年来 蓬勃的数字化应用对其广域网带来了巨大挑战 该公司采用Fort
  • ARGB,RGB颜色值表示

    转载请注明出处 http blog csdn net wei chong chong article details 50831493 今天自定义一个控件 设置背景颜色时犯难了 现在就来总结一下android中的颜色值表示 android
  • 9月,Java岗爆了!

    你有面试机会了吗 随着金九银十到来 肯定有很多小伙伴想抓住一年两次的机会 开始疯狂投简历了吧 但是事实是 投出去的简历基本上HR都是已读不回 收到面试邀请 被告知不用面试了 参加了面试 就像走了个过场 成了HR的业绩指标 面试通过 但是被放
  • LWIP在STM32上的移植

    本文做记录摘抄 加上自己的体会 文章标题 STM32使用LWIP实现DHCP客户端 http www cnblogs com dengxiaojun p 4379545 html 该文章介绍了几点 LWIP源码的内容 关键点 1 inclu
  • id选择器和class选择器

    id选择器 id选择器用来选取带有给定id属性的元素 语法 id例如 html div div css container color blue id选择器的一些特征 1 id选择器以 号开头 后跟元素的id属性值 2 id选择器只能选取带
  • 英伟达最新开源

    Title FasterViT Fast Vision Transformers with Hierarchical Attention Paper https arxiv org pdf 2306 06189 pdf Code https
  • 《Terraform 101 从入门到实践》 Functions函数

    Terraform 101 从入门到实践 这本小册在南瓜慢说官方网站和GitHub两个地方同步更新 书中的示例代码也是放在GitHub上 方便大家参考查看 Terraform的函数 Terraform为了让大家在表达式上可以更加灵活方便地进
  • 计算从指定日期开始的第几周的周几的日期

    项目场景 拿到的排课表数据 里面没有具体日期 而是第几周 周几的形式 需要转换成具体日期 问题描述 其中的周几是从周一开始的 从1 到7 转换时也是按这个顺序来 原因分析 先需要获取到学期开始的日期 例 date1 得出是周几 例 周3 是
  • Java实现动态数组

    Java中动态数组的实现是非常常见的数据结构 可以用来存储一组数据并动态调整数组的大小 本文将以 Java 语言为例 介绍如何实现一个简单的动态数组 其中包含基本操作如增加 删除 查询和遍历等 1 定义动态数组 在Java中 可以使用int
  • systemc verilog IEEE 注册登录下载

    https accellera org downloads standards systemrdl SystemRDL 2 0 SystemRDL Register Description Language 一次定义 多种HDL语言场合使用
  • 深入了解计算机端口(2)

    转载 url http www exam8 com computer spks ziliao ws 200504 10798 2 html url Virtualizing DNS DHCP Soft appliances for easy
  • Webstorm使用心得

    原文来自 http www jianshu com p 4ce97b360c13 Webstorm 大多数配置都在File gt Settings选项卡中进行的 也许你不得不第一个记住它的快捷键 Ctrl Alt S 1 设置开发工具主题
  • Edraw Max教程】如何有趣的创建梦幻般的思维导图

    Edraw Max 亿图图示 是一款综合图形图表制作软件 它包含丰富的实例和模版 帮助您轻松创建流程图 网络拓扑图 组织结构图 商业图表 工程图 思维导图 软件设计图和平面布局图等 亿图采用更智能和人性化的绘制方式 最大程度帮助设计者降低工
  • 九度OJ 1193:矩阵转置 (矩阵计算)

    时间限制 1 秒 内存限制 32 兆 特殊判题 否 提交 1673 解决 1132 题目描述 输入一个N N的矩阵 将其转置后输出 要求 不得使用任何数组 就地逆置 输入 输入的第一行包括一个整数N 1 lt N lt 100 代表矩阵的维
  • react umi实战

    umi umiJs是一个类Next JS的react开发框架 它基于一个约定 即pages目录下的文件即路由 而文件则导出react组件 然后打通从源码到产物的每个阶段 并配以完善的插件体系 让我们能把umi的产物部署到各个场景里面 初始化
  • Unity发布时出现“The type or namespace name `UnityEditor' could not be found.

    现象 using UnityEditor 就算包含了头文件 也会报错 原因 在非编辑器脚本中加入编辑器脚本时 修改方法 1 在Asset中创建Editor文件夹 并将有对Editor操作的脚本全放入到该文件夹中 再次运行之前出错的函数 问题
  • java中的自定义对象排序

    对于数组排序我们知道有Arrays sort 方法 但是如果遇到想要对一个对象数组中的某个属性进行排序 我们该如何去做呢 以给学生成绩排序为例 首先创建一个存储学生对象的数组 package JAVA API public class So
  • 容器数据持久化

    一 挂载方式 Docker提供三种方式将数据从宿主机挂载到容器中 volumes Docker管理宿主机文件系统的一部分 var lib docker volumes 保存数据的最佳方式 bind mounts 将宿主机上的任意位置的文件或