首页 > 其他分享 >docker 数据卷-学习

docker 数据卷-学习

时间:2023-10-27 17:07:30浏览次数:38  
标签:容器 -- 学习 nginx 挂载 docker 数据

容器数据卷

容器数据存储路径同步在宿主机文件目录做数据持久化保存(目录挂载、映射)不进行这一步,会导致删除容器后,数据直接丢失。

容器间数据卷也可以进行共享 数据卷的使用,类似于 Linux 下对目录或文件进行 mount

1、宿主机目录映射容器内部目录

-v 宿主机目录:容器内目录(使用 -v 来创建一个数据卷并挂载到容器里)

例:使用centos镜像启动一个命名为centos-test的容器,指定宿主机目录/data/docker-test与容器/home进行映射,并进入容器

命令:docker run -it --name centos-test -v /data/docker-test:/home centos /bin/bash (对比下图容器内与宿主机对应目录文件)容器就算处于关闭状态数据依旧同步

docker 数据卷-学习_数据卷

可以使用 docker inspect 容器id 查看Mounts 字段参数


docker 数据卷-学习_docker_02

安装mysql

需要考虑数据持久化问题

#启动容器并挂载数据卷。启动mysql容器时需要指定密码!

#获取mysql镜像[root@caoyuchun2 ~]# docker pull mysql:5.7[root@caoyuchun2 myslq-docker]# docker run --name=myslq-test -d -p 3306:3306 -v /data/mysql-docker/conf.d:/etc/mysql/conf.d -v /data/mysql-docker/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password123 -d mysql:5.7
8046cf11ef2c4f4aebc2bd46856eafa0298a786384663ab173c887830f2fbf4f
# 参数详情
-d:后台运行
-p:宿主机与容器服务端口  3306:3306
-v:宿主机目录与容器内目录挂载,几个-v就可以挂载几个目录
-e:环境配置
--name:启动容器的自定义名字

匿名挂载

匿名挂载就是在指定数据卷的时候,不指定容器路径对应的主机路径,这样对应映射的主机路径就是默认的路径/var/lib/docker/volumes/中自动生成一个随机命名的文件夹。

如下运行并匿名挂载Nginx容器:

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -P --name nginx01 -v /etc/nginx nginxd3a27b969d122d5516cac75e99b17dff7aaaf1e0c042385c6b05990053f1259

查看所有的数据卷volume的情况, VOLUME NAME这里的值是真实存在的目录。

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker volume ls    DRIVER    VOLUME NAME  local     0cd45ab893fc13971219ac5127f9c0b02491635d76d94183b0261953bdb52d26
  local     668a94251e562612880a2fdb03944d67d1acdbbdae6ef7c94bee8685644f2956
  local     e605f3dc4bf11ab693972592b55fb6911e5bf2083425fd58869c5f574998a09a
具名挂载

具名挂载,就是指定文件夹名称,区别于指定路径挂载,这里的指定文件夹名称是在Docker指定的默认数据卷路径下的。通过docker volume ls命令可以查看当前数据卷的目录情况。

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx 4ceaff19e5275dcd3014a8e7a8af618f7f7ce0da18d605c7c41a8653e78bf912 [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker volume ls DRIVER VOLUME NAME local 0cd45ab893fc13971219ac5127f9c0b02491635d76d94183b0261953bdb52d26 local 668a94251e562612880a2fdb03944d67d1acdbbdae6ef7c94bee8685644f2956 local e605f3dc4bf11ab693972592b55fb6911e5bf2083425fd58869c5f574998a09a local juming-nginx

查看指定的数据卷信息的命令:docker volume inspect 数据卷名称

默认路径在 /var/lib/docker/volumes/xxxxxx/_data

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker volume inspect juming-nginx    [          {           "CreatedAt": "2020-12-29T22:40:25+08:00",          
                "Driver": "local",          
                "Labels": null,         
                "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",          
                "Name": "juming-nginx",          
                "Options": null,          
                "Scope": "local"      }  ]

可以看到主机数据卷挂载在/var/lib/docker/volumes/juming-nginx/_data上

Docker所有的数据卷默认在/var/lib/docker/volumes/ 目录下(如果我们没有指定挂载目录的话,就挂载在这个位置。如果我们没有起名字,就是匿名挂载。否则就是具名挂载)

匿名挂载,具名挂载,指定路径挂载的命令区别如下:

-v 容器内路径 匿名挂载

-v 卷名:容器内路径 具名挂载

-v /宿主机路径:容器内路径 指定路径挂载

指定数据卷映射的相关参数:

ro —— readonly 只读。设置了只读则只能操作宿主机的路径,不能操作容器中的对应路径。

rw —— readwrite 可读可写

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx#ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部无法操作!

默认情况下是rw


  • 具名挂载:-v 具名名称:/容器内路径 大多数使用具名挂载,方便寻找到一个卷
  • 匿名挂载:-v /容器内路径
  • 指定路径:-v /宿主机路径:/容器内路径


--volumes-from 指定父容器之间数据卷共享

如果你有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器。

数据卷容器,其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。

首先,创建一个命名的数据卷容器 dbdata:

docker run -d -v /dbdata --name dbdata training/postgres echo Data-only container for postgres

然后,在其他容器(db1、db2)中使用 --volumes-from 来挂载 dbdata 容器中的数据卷。

docker run -d --volumes-from dbdata --name db1 training/postgresdocker run -d --volumes-from dbdata --name db2 training/postgres

还可以使用多个 --volumes-from 参数来从多个容器挂载多个数据卷。 也可以从其他已经挂载了数据卷的容器来挂载数据卷。

docker run -d --name db3 --volumes-from db1 training/postgres

*注意:使用 --volumes-from 参数所挂载数据卷的容器自己并不需要保持在运行状态。

如果删除了挂载的容器(包括 dbdata、db1 和 db2),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用 docker rm -v 命令来指定同时删除关联的容器。 这可以让用户在容器之间升级和移动数据卷。

备份、存储、移动数据卷

另一个非常有用大功能是利用数据卷容器进行备份、存储以及迁移操作。

备份

 docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

然后新创建一个新的容器

docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

然后解压数据卷挂载到容器

docker run --volumes-from dbdata2 -v $(pwd):/backup ubuntu cd /dbdata && tar xvf /backup/backup.tar


标签:容器,--,学习,nginx,挂载,docker,数据
From: https://blog.51cto.com/u_13587551/8061568

相关文章

  • 文档型数据库将重新定义数据存储与检索
    在当前的数据驱动时代,数据库技术日新月异。文档型数据库因其独特的存储结构和索引机制而逐渐崭露头角,尤其是在云计算和大数据应用中。那么,当我们深入研究文档型数据库的内容存储和索引时,它与传统的关系型数据库有何不同?本文通过文档型数据库的典型案例——MongoDB和巨杉数据库Sequo......
  • Vsan数据恢复—异常断电Vsan存储上层虚拟机无法启动的数据恢复案例
    Vsan分布式存储故障&检测:异常断电导致一台vsan存储设备上层虚拟机无法启动。将故障Vsan存储上的所有磁盘编号后取出,由北亚企安的硬件工程师对vsan存储上的所有硬盘进行物理故障检测,经过检测没有发现硬盘存在物理故障。vsan存储结构简图:将vsan存储中所有硬盘以只读方式做全盘镜......
  • 第六周学习笔记
    Linux进程管理多任务处理在编程中,多任务处理是指同时执行多个任务或进程的能力。这种能力可以通过并发编程来实现,其中任务可以是同时执行的线程、进程或协程。进程的概念进程:进程是对映像的执行在操作系统内核中,每个进程用一个独特的数据结构表示,叫作进程控制块(PCB)或任务控制......
  • 数据统计分析 — 泊松分布
    在一指定时间范围内或在指定的面积或体积内某一事件出现的次数的分布,他们对应的随机变量的概率服从的分布叫做泊松分布,泊松分布是二项分布的极限例如:某企业中每月某设备出现故障的次数单位时间内到达某一服务台需要服务的顾客人数举个例子小王的婶婶新开了一个包子铺,生意......
  • 第七周学习笔记
    并发编程并行计算导论顺序算法与并行算法顺序算法:begin  step_1  step_2  ……  step_nend//nextstep并行算法:cobegin  task_1  task_2  ……  task_ncoend//nextstep并行性与并发性在单CPU系统中,一次只能执行一个任务。不同的任务只能......
  • Mysql 删除数据重重复
    一、背景二、实现查看表的重复数据条数SELECTcount(1)a,serial_noFROM`mud_weighbridge_record`GROUPBYserial_noHAVINGa>1;删除表的重复数据DELETEt1from mud_weighbridge_recordt1innerjoin(SELECTmin(record_id)record_id,serial_no,count(1)FROM......
  • Docker部署Redis集群----第一节(docker初认识)
    1、Docker是什么?docker是开源的应用容器引擎,我们可以理解为一个轻量级的“虚拟机”,开发者可以打包自己开发的应用或程序到一个可移植的容器中去,然后发布到任何流行的linux机器上,由此可见docker为我们的开发和部署带来了极大的方便和稳定性,我们还有什么理由错误它呢?2、为什么要......
  • C++从std::vector<int>类型数据创建二叉树
    背景在和chatGPT的日常代码交流中,这位“老师”总能给出不不少好代码,以下就是C++从std::vector类型数据创建二叉树的完整代码段:TreeNode*createBinaryTree(conststd::vector<int>&nodes,intindex){if(index>=nodes.size()||nodes[index]==-1){retu......
  • 数据库设计案例
    CREATETABLEMusic(titleVARCHAR(32),aliasVARCHAR(32),imageVARCHAR(64),idINTPRIMARYKEY);CREATETABLESong(NAMEVARCHAR(32),serial_numberTINYINT,idINTPRIMARYKEY,music_idINT,CONSTRAINTfk_music_songFOREIGNKEY(music_id)REFE......
  • 合成数据的好处和用途
    在不断变化的数据科学和人工智能环境中,合成数据集的概念成为具有多种用途的强大工具。假设您是一名数据科学家,并分配了为电子商务网站创建尖端推荐系统的任务。为此,您需要大量的用户交互数据。但是,您面临着保护用户隐私和处理高度不平衡的数据集的挑战,该数据集对少数产品几乎没有......