前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 实践经验(三):Docker 容器数据卷

Docker 实践经验(三):Docker 容器数据卷

作者头像
看、未来
发布2022-05-06 17:40:43
3050
发布2022-05-06 17:40:43
举报
文章被收录于专栏:CSDN搜“看,未来”
在这里插入图片描述
在这里插入图片描述

文章目录

容器数据卷?是什么

但凡是数据,都逃不开一个最基本的问题:数据丢了怎么办? 所以就衍生出各种备份方案。 Docker 也是如此,你就不怕哪天容器让人给删了吗?

卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性。 卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。


如何挂载容器卷

其实这篇内容很简单,就讲一下什么是容器卷,以及怎么挂载,再演示一下就完了。

代码语言:javascript
复制
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

演示一:数据恢复

演示步骤:

代码语言:javascript
复制
1、启动 Ubuntu 容器
2、在启动时挂载容器卷
3、创建一个文件
4、关闭容器
5、删除容器
6、重新并启动容器并挂载容器卷
7、检查文件是否还存在
在这里插入图片描述
在这里插入图片描述

我对几条重要命令解释一下:

代码语言:javascript
复制
docker run -it --name myu --privileged=true -v /tmp/myHostData:/tmp/myDockerData ubuntu /bin/bash

这里我给它起了个名字,不起也可以,但是想到我自己都有名字,它没名字怪可怜的。 –privileged=true:Docker挂载主机目录访问。如果出现cannot open directory .: Permission denied,那就加上这个参数。 /tmp/myHostData:/tmp/myDockerData:在容器内 /tmp/myDockerData 目录下的所有文件及时同步到 宿主机内的 /tmp/myHostData 目录下,这两个路径可以是本不存在的,会自动创建。

可以看到,在我删除了原 myu 实例之后在启动容器,连目录都丢了,何况目录下的文件。

可以挂载多个目录,每次挂载都来个 -v 就好,下一章会看到。


演示二:宿主机数据传入容器

熟悉吗?我们以前使用 VMware 的时候,也都有从宿主机上传文件进 VMware 上的系统吧。

演示步骤:

代码语言:javascript
复制
1、确定容器未启动
2、在宿主机的挂载路径下新建文件
3、启动容器并挂载
4、查看文件是否出现在容器中
在这里插入图片描述
在这里插入图片描述

敲错命令了。。。mkdir 是创建目录。。。

演示步骤:

代码语言:javascript
复制
1、确定容器已启动
2、在宿主机的挂载路径下新建文件
3、查看文件是否出现在容器中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

由此可见,这个容器卷可不仅仅是一个数据持久化的工具哦,它是可以双向通信的。


有个事儿忘了说,挂在之后一定要确定一下是否挂载上了,有个命令:

代码语言:javascript
复制
docker inspect 容器ID/容器名

看到有如下:

在这里插入图片描述
在这里插入图片描述

当然,我个人更喜欢直接再挂载路径下新建一个小文件,看它有没有通就知道了。


读写规则

容器卷也是可以设置读写规则的。默认是读写全开。

代码语言:javascript
复制
docker run -it --name myu --privileged=true -v /tmp/myHostData:/tmp/myDockerData ubuntu /bin/bash

等同于

代码语言:javascript
复制
docker run -it --name myu --privileged=true -v /tmp/myHostData:/tmp/myDockerData:rw ubuntu /bin/bash

如果这样写,就是只读权限:

代码语言:javascript
复制
docker run -it --name myu --privileged=true -v /tmp/myHostData:/tmp/myDockerData:ro ubuntu /bin/bash
在这里插入图片描述
在这里插入图片描述

只读权限下,容器只能从数据卷中读取数据,而不能将数据同步至数据卷中。

那有没有只写?很可惜,莫得。。。


卷的继承和共享

一个容器启动时,可以继承另一个容器的卷规则。 你可能会觉得,就那么几个字符都不愿意去 cv 一下嘛,还要去别的容器那边去继承来。 看似有点鸡肋,但是存在即合理不是吗? 毕竟我们现在容器卷就一个,看着简单,到下一篇我们把集群放上容器的时候你再看哈哈。

命令也很简单:

代码语言:javascript
复制
容器一完成和宿主机间的映射:
docker run -it  --privileged=true -v /mydocker/u:/tmp --name u1 ubuntu

容器二继承容器一和宿主机间的映射:
docker run -it  --privileged=true --volumes-from u1  --name u2 ubuntu

呐,就这么简单我就不再多解释了吧。

这时候如果有眼尖的人很快就会想到,那如果容器一挂了呢?容器二和宿主机之间还能正常通信么? 可以自己玩玩试试。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 容器数据卷?是什么
  • 如何挂载容器卷
  • 演示一:数据恢复
  • 演示二:宿主机数据传入容器
  • 读写规则
  • 卷的继承和共享
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档