Docker—容器数据卷

article/2025/10/11 5:27:12

目录

1.什么是容器数据卷

2.数据卷的使用

3.实战MySQL同步数据

4.卷 常用命令

5.匿名挂载与具名挂载

5.1 匿名挂载

 5.2 具名挂载

6.数据卷容器


1.什么是容器数据卷

Docker将运用与运行的环境打包形成容器运行, Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了。 为了能保存数据在Docker中我们使用卷。|

卷就是目录或文件,存在于一个或多个容器中,由Docker挂载到容器,但卷不属于联合文件系统(Union FileSystem),因此能够绕过联合文件系统提供一些用于持续存储或共享数据的特性:。


卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。

Docker容器卷的工作就是将docker容器数据通过映射进行备份+持久化到本地的主机目录

2.数据卷的使用

方法一:直接使用命令来挂载 -v

docker run -it -v 主机目录:容器目录

 我们测试一下

 

 

Source:来源  Destination:目的地     挂载就是主机往容器挂的,源是主机,挂载就是将宿主机的一部分空间共享给容器一起用(因此数据卷也可以用来做扩容!!)宿主机和容器都可以数据共享

 即使容器被停止,在宿主机操作的挂载目录下的文件,容器内还是会映射去的。

注意:它们类似共享文件占用一块存储,不会存两份

  

 好处:我们以后修改只需要在本地修改即可,容器内会自动同步!

3.实战MySQL同步数据

在Linux下的MySQL默认的数据文档存储目录为/var/lib/mysql,默认的配置文件的位置/etc/mysql/conf.d,为了确保MySQL镜像或容器删除后,造成的数据丢失,下面建立数据卷保存MySQL的数据和文件。

docker run -d -p 6603:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

-d  后台运行

-p  端口映射

-v  卷挂载

-e  配置环境,设置了密码

--name 取名

 在本机用Navicat连接测试

在连接中新建了个数据库,在服务器中的文件夹下依然可以找到,挂载成功!

4.卷 常用命令

0.创建数据卷 (没什么用

docker volume create #VOLUME NAME

1.查看所有的数据卷

docker volume ls

2.查看指定数据卷的信息

docker volume inspect #VOLUME NAME

 3.删除数据卷 docker volume rm ...

docker volume rm #VOLUME NAME

 无法删除正在被使用的,容器存在的。

4.删除容器之时删除相关的卷 

docker rm -v ...

数据卷是被设计用来持久化数据的,它的生命周期独立于容器,Docker 不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷 。如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 docker rm -v 这个命令。

无主的数据卷可能会占据很多空间,要清理请使用以下命令
 

docker volume prune

5.匿名挂载与具名挂载

我们之前挂载   docker run -it -v 主机目录:容器目录   这种方式是指定路径挂载的,但是我们也可以不定义主机目录路径。有两种方式挂载。

Docker所有的数据卷默认挂载在宿主机 /var/lib/docker/volumes/ 目录下

5.1 匿名挂载

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

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

docker run -d -P --name nginx01 -v /etc/nginx nginx

 5.2 具名挂载

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

 有了挂载名,我们就可以更好的操作,所以这也是比较常用的。

可以查看一下volume的信息

匿名挂载,具名挂载,指定路径挂载的命令区别如下:
-v 容器内路径 #匿名挂载

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

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

扩展:

#通过      -v 容器内路径:     ro        rw        改变读写权限

ro          readonly       #只读
rw         readwrite      #可读可写
#一旦这个了设置了容器权限,容器对我们挂载出来的内容就有限定了!
docker run -d -p --name nginx02 -v juming-nginx : /etc/nginx:ro nginx

docker run -d -p --name nginx02 -v juming-nginx : /etc/nginx:rw nginx

# ro  只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!

6.数据卷容器

容器数据卷是指建立数据卷,来同步多个容器间的数据,实现容器间的数据同步。

 

  • 启动三个容器实现数据同步
创建docker01:因为我本机是最新版
docker run -it --name docker01 wjc/centos:latest查看容器docekr01内容
ls
bin  home   lost+found    opt   run   sys  var
dev  lib    media    proc  sbin  tmp  volume01
etc  lib64  mnt        root  srv   usr  volume02不关闭该容器退出
CTRL + Q + P  创建docker02: 并且让docker02 继承 docker01
docker run -it --name docker02 --volumes-from docker01 wjc/centos:latest查看容器docker02内容
ls
bin  home   lost+found    opt   run   sys  var
dev  lib    media    proc  sbin  tmp  volume01
etc  lib64  mnt        root  srv   usr  volume02

首先在容器2中的volume01中添加文件

[root@7f90d4147511 /]# cd volume01
[root@7f90d4147511 volume01]# touch test.java
[root@7f90d4147511 volume01]# ls
test.java

然后就可以看到容器1的文件也会添加上了

  • 创建docker03继承docker01

 

 docker run -it --name docker03 --volumes-from docker01 wjc/centos:latest
cd volume01    #进入volume01 查看是否也同步docker01的数据

ls 
docker01.txt
# 测试:可以删除docker01,查看一下docker02和docker03是否可以访问这个文件
# 测试发现:数据依旧保留在docker02和docker03中没有被删除
 

 

 

下面同步两个MySQL的数据库和配置文件,与上面的操作相同,首先建立数据卷,然后给另一个MySQL容器建立容器数据卷挂载

$ docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
$ docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01  mysql:5.7
# 这个时候,可以实现两个容器数据同步。
  • 容器之间的配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
  • 但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的。

http://chatgpt.dhexx.cn/article/3GIXPneF.shtml

相关文章

docker删除已停止的容器

一、docker删除已停止的容器 1、根据容器的状态,删除Exited状态的容器 先停止容器、再删除镜像中的容器、最后删除none的镜像。执行命令如下: docker stop $(docker ps -a | grep "Exited" | awk {print $1 }) #停止容器 docker rm $(docke…

Docker与容器的区别

容器 虚拟机和容器结构主要区别在于中间两层,虚拟机自带了操作系统,这个操作系统可以和宿主机一样,也可以不一样,而容器是和宿主机共享一个操作系统。我们知道,操作系统的内容是很多的,就像我们自己电脑上的…

docker 删除 容器/镜像 方法

docker的删除有两种,一个是rm 删除容器,一个是rmi删除镜像 想要删除运行过的images(镜像) 必须首先删除它的container(容器) 首先查看并找到要删除的镜像 docker images 这里我们要删除hello-world镜像 使用rmi 加 镜像id docker rmi fce289e99eb9 报…

docker多容器操作与强制删除容器的方法步骤

简介: 这是一篇有关【doker的多容器操作和强制删除容器的方法】的文章,用最精简的语言去表达给前端读者们。 1、创建多个容器 在WIndows环境下我们来作这个,先打开三个PowerShell窗口,然后在每个窗口中输入创建容器的命令&#…

Docker删除镜像和容器

一、删除容器 首先需要停止所有的容器(只停止单个时把后面的变量改为image id即可) docker stop $(docker ps -a -q) 删除所有的容器(只删除单个时把后面的变量改为image id即可) docker rm $(docker ps -a -q) 二、删除镜像…

如何删除docker镜像与容器

目录 删除示例: 1.查看docker中要删除的镜像 2.删除镜像,使用命令“docker rmi image id” 3.查看docker中正在运行的容器 4.停止容器 5.删除容器 6.查看容器 7.删除镜像 8.最后查看所有镜像 删除示例: 1.查看docker中要删除的镜像 …

docker删除容器日志

废话不多数,看步骤 查看容器日志命令 docker logs -f 容器id 1.进入docker容器目录 cd /var/lib/docker/containers/ 2.查看容器的id,获取容器id,容器id就是容器目录名字 docker ps -a 3.进入容器,删除以.log结尾的文件就是日志文件了&a…

Docker 删除容器

用docker一段时间后,host上可能会有大量已经退出了的容器, 这些容器依然会占用host的文件系统资源,如果确认不会再重启此类容器,可以通过docker rm删除 docker rm一次可以指定多个容器,如果希望批量删除所有已经退出的…

如何优雅地删除Docker镜像和容器(超详细)

一、前言 大家是怎么删除Docker中的镜像和容器的呢,有没有考虑过如何优雅地删除呢?本教程详细指导如何在优雅地删除Docker容器和镜像。如需了解如何在Centos7系统里面安装Docker,可以参考教程【最新Docker在Centos7下安装部署(参考…

AirPlay

最近一直在研究苹果的AirPlay协议。真是个好东西,基本上现在可以把任何屏幕内容,包括音频,视频和屏幕投射到支持AirPlay接收的设备上,目前是Apple TV或者AirExpress。 网上资料很少,比较有用的是这个哥们写的一篇AirPl…

aplay amixer用法详解

aplay aplay -t raw -c 1 -f S16_LE -r 8000 test2.pcm -t: type raw表示是PCM -c: channel 1 -f S16_LE: Signed 16bit-width Little-Endian -r: sample rate 8000 PCM是最raw的音频数据,没有任何头信息。WAV文件就是PCM头信息,头信息就是上述的声道…

aplay amixer arecord说明

arecord声音录制 arecord -l列出声卡和数字音频设备 -D参数用于指定音频设备PCM 以hwx,x开头 根据上面l列出的设备,如果选择tvp5158来录制声音的话那么pcm设备就位hw0,0,如果是tlv320aic3x则pcm设备为hw0,1,sii9135则pcm设备为hw0,2。 声卡号,设备号 -r指定采样频率:5512/8000…

【全志T113-S3_100ask】9-音频输入与输出(amixer、aplay、arecord)

【全志T113-S3_100ask】9-音频输入与输出 背景(一)amixer 的使用(二)amixer 设置音频输出参数(三)使用 aplay 播放音乐(四)使用 arecord 录音 背景 之前查看系统命令,发…

如何使用Aplayer播放器

Aplayer 一、部署 1、Aplayer 官网体验网址:https://aplayer.js.org/ Aplayer的GitHub网址: https://github.com/MoePlayer/APlayer 中文文档手册网址:首页 – APlayer 使用方法很简单,加载Aplayer的js和css,在想…

aplay,arec,amix使用

标准的alsa命令为,aplay,amixer,arecord 如下是高通在mdm9x07芯片上做了客制化的命令 aplay aplay -D hw:0,17 -P &arec arec -D hw:0,17 -P -R 8000 -C 1 &-D card 声卡 -d device 设备 -c channels 通道 -r rate 采样率 -b bits…

Splay

Spaly 众所周知,Splay 是一种平衡二叉查找树(不要告诉我你不知道二叉查找树是什么qwq 不知道什么是二叉查找树的看过来: 关于二叉查找树)。在这篇东西的最后我们也解释了为什么我们需要用到平衡二叉查找树而不是直接查找&#xff…

aplay 源码分析

ffmpeg -formats ffmpeg -sample_fmts ffmpeg -i ../english14.mp3 -ar 44100 -ac 2 -sample_fmt s16 -f wav english14.wav ffmpeg -i ../english14.mp3 -ar 44100 -ac 2 -sample_fmt s16 -f s16le english14.pcm其中针对PCM个数的数据aplay正确的播放格式为: apl…

Qt,Linux: 播放声音(aplay)

Linux下,Qt开发,使用的电脑情况比较复杂,开发机是Intel cpu, 常用的验证机是飞腾(arm)cpu, 客户的目标机也是飞腾(arm)cpu, 但验证机和目标机上情况还不太一样。 需要用到播放声音的功能&#x…

ALSA音频架构 -- aplay播放流程分析

引言 上文ALSA音频架构 – snd_pcm_open函数分析已经获取了aplay中对应的播放API writei_func snd_pcm_writei;,本文将具体分析该API在哪里调用。 aplay处理数据流顺序图 代码详细分析 1、对参数进行解析,存储在全局变量hwparams,配置回调…

《Autosar_MCAL高阶配置》总目录_培训教程持续更新中...

欢迎大家订阅《Autosar_MCAL高阶配置》专栏(可以理解为是Autosar培训教程),献上常用的案例和配置方法。下方整理了相关博文的链接(单击蓝色字体即可跳转),方便大家获取。 本专栏旨在: 扫除Auto…