前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Docker核心:深入理解Docker容器数据卷

Docker核心:深入理解Docker容器数据卷

作者头像
百思不得小赵
发布于 2022-12-01 07:06:01
发布于 2022-12-01 07:06:01
1K00
代码可运行
举报
文章被收录于专栏:小赵Java总结小赵Java总结
运行总次数:0
代码可运行

目录

容器数据卷介绍

Docker容器运行时产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了。例如:容器中部署了MYSQL数据库,如果有一天将部署MySQL数据库的容器删除了,存放的数据也就丢失。为了能保存数据在Docker中我们使用卷来实现容器内数据与我们指定的目录文件同步,当某一方数据发生修改时,另一方也随之改变。

因此,容器的持久化和同步操作!容器间数据也是可以共享的!

使用数据卷

方式一:使用命令进行挂载数据 -v

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -it -v 主机目录:容器内目录

测试一下: 将主机/home/ceshi与容器中的/home目录进行绑定

查看当前容器的详细信息:docker inspect 容器ID

① 在容器内创建了一个test.java文件,自动同步到了主机内:

② 在主机内创建了一个haha.java然后自动同步到容器内:

③ 退出容器,此时容器停止运行

修改主机上的test.java文件,添加如下内容

重新启动容器

查看容器中的test.java文件,发现数据依然同步成功!

这时就实现了主机与容器数据的同步和共享!!

MySQL 数据同步

① 拉取MySQL镜像到本地

② 运行容器挂载数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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

③ 启动成功,使用数据库连接工具进行连接

连接成功

④ 查看本地主机,数据挂载成功

⑤ 使用数据库连接工具创建数据库

主机数据同步成功

⑥ 测试删除容器,数据是否存在

数据依旧存在:

MySQL数据本地持久化测试成功!!

具名挂载和匿名挂载

匿名挂载

-v 容器内路径 (不指定主机名,只指定容器内路径)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -d -P --name nginxtest -v /etc/nginx nginx

查看所有 volume 信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker volume ls

在之前只指定容器内路径,没有写容器外路径,这就是匿名数据卷,类似于上图的格式。

具名挂载

-v 卷名:容器内路径

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx

查看数据卷具体的位置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker volume inspect 名称

Docker中所有的数据卷,如果没有指定目录的情况下,都在/var/lib/docker/volumes/ 目录下。

如何确定是具名挂载匿名挂载指定路径挂载

-v 容器内路径 匿名挂载 -v 卷名:容器内路径 具名挂载 -v /主机路径:容器内路径 指定路径挂载

拓展

通过 -v 容器内路径:ro ( rw ) 改变读写权限 ro readonly 只读 rw readwrite 可读可写 一旦设置容器权限,容器对挂载出的内容就有限定

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

初始Dockerfile

方式二:Dockerfile挂载数据卷

Dockerfile就是用来构建docke镜像的构建文件,是一段命令脚本,通过脚本可以生成镜像,镜像是一层一层的,脚本是一行一行的命令,每个命令都是一层!!

① 编写dockerfile脚本 (指令都是大写)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM centos

VOLUME ["volume1","volume2"]

CMD echo "-----end-----"

CMD /bin/bash

② 构建镜像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker build -f dockerfile全路径 -t 镜像名称 .

构建成功,生成镜像

③ 启动容器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -it 8eb8e022a7af /bin/bash

生成的数据卷与外部一定有一个同步的目录。

在容器中创建一个文件`container.txt

查看数据卷挂载的路径:

查看在容器中创建的 文件是否同步到主机

发现数据同步成功!!

数据卷容器

容器和容器之间的数据进行同步!

① 启动3个容器 启动docker01

启动docker02

② 在docker01中volume1目录下创建docker01文件

③ 查看docker02中volume1目录下是否存在docker01文件

docker01中的数据挂载到了docker02上,实现数据同步,docker01叫做数据卷容器!

④ 启动docker03容器挂载docker01

⑤ 在docker03中创建数据,在docker01中查看也是存在的。

⑥ 删除docker01容器,数据依旧可以访问!

⑦ 多个mysql实现数据共享

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 docker run -d -p 3306:3306  -v /etc/mysql/conf.d
 -v /var/lib/mysql 
 -e MYSQL_ROOT_PASSWORD=123456 
   --name mysql01 mysql:5.7

 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 mysql02 --volumes-from mysql01 mysql:5.7

最后总结

  • 容器数据卷的本质就是实现数据的持久化、数据的共享!
  • 三种实现方式:1.手动-v 命令。2.使用Dockerfile构建镜像,自动挂载数据。3.使用--volumes-from实现容器之间的数据共享,数据同步
  • 容器之间配置信息的传递,数据卷容器的生命后期一直持续到没有容器为止!
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Docker容器数据卷
这个命令会在宿主机和容器内分别建立两个目录,两个目录是对接的,里面的数据可以共享。如果我们不知道数据卷是否挂载成功时,我们可以通过以下方式来检查数据卷的挂载结果。
李昂君
2021/12/24
1.1K0
Docker容器数据卷
方式一:直接使用命令挂载 -v
从docker的理念说起,docker将应用和环境打包成一个镜像,运行镜像(生成容器)就可以访问服务了。
甜点cc
2022/10/24
5600
方式一:直接使用命令挂载 -v
Docker 实用学习笔记(看这一篇就足够了)
开始 -> Docker 在本机寻找对象 -> 判断本机是否有这个镜像 -> 没有则去下载 Docker Hub 这个镜像 —> 找不到镜像就返回错误(否则就下载镜像到本地)
Gorit
2021/12/08
2.5K0
Docker 实用学习笔记(看这一篇就足够了)
快速入门Docker(4)——commit镜像|容器数据卷
上篇文章给家讲解了实战练习附带了给大家又聊了下境像讲解的原理,本篇文章主要给家聊一聊关于commit的和容器数据卷相关内容附带一些练习,编写不易:对你有帮助【一键三连,收藏】。看完掌握以下内容:
大数据老哥
2021/02/04
1.2K0
快速入门Docker(4)——commit镜像|容器数据卷
【Docker 系列】docker 学习六,探究一下数据卷容器
Dockerfile 就是用来构建 docker 镜像的构建文件,关于 Dockerfile 详细的我们在后面一期说到,此处先用用
阿兵云原生
2023/02/16
3330
Docker重学系列之高级数据卷配置
容器数据卷就是目录的挂载,将我们的容器的目录挂载到宿主机上,从而实现打通宿主机和容器之间的文件共享功能;
大忽悠爱学习
2022/05/10
5410
Docker重学系列之高级数据卷配置
【Docker】007-Docker容器数据卷
当我们在使用docker容器的时候,会产生一系列的数据文件,这些数据文件在我们关闭docker容器时是会消失的,但是其中产生的部分内容我们希望能够把它给保存起来另作用途的,Docker将应用与运行环境打包成容器发布,我们希望在运行过程钟产生的部分数据是可以持久化的,而且容器之间我们希望能够实现数据共享;
訾博ZiBo
2025/01/06
990
【Docker】007-Docker容器数据卷
docker(容器数据卷)
所有的docker容器内的卷,没有指定目录的情况下都是在**/var/lib/docker/volumes/自定义的卷名/_data**下, 如果指定了目录,docker volume ls 是查看不到的。
崔笑颜
2020/10/29
1.3K0
docker(容器数据卷)
docker(初识Dockerfile)
Dockerfile 就是用来构建docker镜像的构建文件!命令脚本!先体验一下!
崔笑颜
2020/10/29
3930
docker(初识Dockerfile)
Docker教程(超全总结)[通俗易懂]
如果需要通俗地描述容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境。
全栈程序员站长
2022/11/04
3.3K0
Docker教程(超全总结)[通俗易懂]
5.docker容器数据卷
1. docker数据卷的添加方式, 有两种: 命令添加, dockerfile添加
用户7798898
2020/09/27
4380
5.docker容器数据卷
【Docker 系列】docker 学习 五,容器数据卷
「再思考一个问题」,容器之间是相互隔离的,如果我们在容器中部署类似 mysql 这样的组件,如果把该容器删除掉,那么 mysql 的数据也会被删掉了,数据丢失了,咱们删库跑路真刺激
阿兵云原生
2023/02/16
4460
Docker容器数据卷
Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了。
兮动人
2021/06/11
6910
Docker容器数据卷
Docker 高级
数据 不应该放在容器中,因为容器一旦删除,数据就会丢失! 数据卷就相当于数据可持久化。
收心
2022/01/20
9360
Docker 高级
Docker | 使用dockerfile生成镜像,清理docker空间
我个人使用的是单核2G的云服务器,用了快三年了,内存、cpu严重吃紧,所以就尝试了清理docker使用空间,主要是删除未使用过的镜像、容器、数据卷、网络命令,具体如下:
甜点cc
2022/10/24
1.3K0
Docker | 使用dockerfile生成镜像,清理docker空间
Docker | 数据持久化与数据共享
参考另一篇Docker安装mysql: https://www.cnblogs.com/all-smile/p/16778376.html
甜点cc
2022/10/24
3370
Docker | 数据持久化与数据共享
Docker 容器的数据管理
docker的理念之一就是将应用和运行的环境打包,因此docker容器的生存周期通常都是与在容器中运行的程序相同的,而我们对数据的要求是持久化,docker容器之间也需要一个共享数据的渠道。这些需求就催生了docker数据卷的诞生。
程序员果果
2019/05/28
5780
Docker学习笔记
镜像是无法修改的,当运行一个镜像后,会产生一个容器,修改只在容器层上生效,当commit容器后会生成一个新的镜像,作为以后备用,以此类推,以后不断叠加,产生出新的镜像。就像虚拟机中的快照一样。
黄啊码
2022/06/20
6530
docker之dockerFile
我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,这个脚本就是Dockerfile; Dockerfile是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建;
Qwe7
2022/01/31
6080
Docker之容器数据卷
Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了。
yuanshuai
2022/08/22
4970
Docker之容器数据卷
相关推荐
Docker容器数据卷
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验