当前位置: 首页 > news >正文

Docker学习_存储篇

当以默认的方式创建容器时,容器中的数据无法直接和其他容器或宿主机共享。为了解决这个问题需要学习一些Docker 存储卷的知识。

Docker提供了三种存储的方式。

  • bind mount共享宿主机文件目录
  • volume共享docker存储卷
  • tmpfs mount共享内存

volume*

volume方式是容器间数据分享的推荐方式。它的运行和管理都是由docker负责。

添加

此处的添加可以分为两层意思,第一层如何添加一个volume,第二层如何向容器中添加一个volume。

添加一个volume

利用`docker volume create`指令创建一个volume,当不指定volume名称时,docker会以一个volume id位置volume的名称。

如下:

当指定volume名称时,docker将创建一个指定名称的volume。

当volume名称相同时,docker不会创建一个新的,而是利用之前创建的volume。

向容器中添加volume

向容器中有两种选项可供选择一种是利用--mount选项,另一种是利用-v选项。

--mount方式

--mount选项支持详细的设定绑定方式,type设定绑定的类型,source设定卷名称,target设定绑定到容器的哪个目录下。

-v方式

-v选项支持简洁的设定绑定方式,利用:作为分隔,可以分成三个部分。第一个部分为volume的名称,当使用匿名volume时可以忽略。第二个部分为绑定到容器的哪个目录下。第三个部分为一些选项。

查询

查看有哪些volume

利用`docker volume ls`指令可以查看系统中所有的volume情况。

查看详细信息

利用`docker volume inspect <volumeName>`指令可以查看某个volume的详细信息。

删除volume

删除volume的前提条件是没有容器正在使用(不管容器是否在运行)该volume,否则会报错无法删除volume。

利用`docker volume rm <volumeName>`指令可以删除指定的volume名称。

备份&还原

备份

就是将容器中volume绑定的目录进行tar打包。

// 将容器中volume绑定的目录打包成压缩文件
tar cfv backup.tar ./mysql
// 将压缩文件转移到宿主机中
docker cp <contianerId>:<tarFilePath> <hostPath>

还原

就是创建一个新的绑定匿名volume的容器,并将tar解压到指定的目录下即可

// 创建一个绑定目录一致的匿名volume容器
docker container create -e MYSQL_ROOT_PASSWORD=SECRET -v /app mysql:5.7// 将宿主机中backup.tar文件复制到容器的绑定目录下
docker cp backup.tar <contianerId>:<path>// 进入容器,并将backup.tar文件解压
docker exec -it <containerId> bash
cd <path>
tar xvf backup.tar

bind mount

bind mount是宿主机和容器之间共享数据的方式。它的作用就是将宿主机中的特定目录或文件绑定到容器的特定目录中。

添加

  • 此处向容器中添bind mount的方式和添加volume的方式非常相似,不同点在于绑定的不是volume名称而是一个宿主机中特定的目录。同样也存在--mount和-v两种方式,向容器中绑定共享的目录。
## 利用--mount方式进行添加
docker container create-e MYSQL_ROOT_PASSWORD=SECRET --mount type=bind,source=<hostPath>,target=<containerPath>mysql:5.7## 利用-v方式进行添加
docker container create-e MYSQL_ROOT_PASSWORD=SECRET-v <hostPath>:<containerPath>mysql:5.7

查询

此处也是通过docker container inspect <containerID>指令查看某个容器下Mounts的信息来查看其共享数据的信息。

Volume和bind mount比较

不同点bind mountvolume
volume位置可任意指定/var/lib/docker/volumes/下
对已有mount point影响隐藏并替换为volume原有数据复制到volume
是否支持单个文件支持不支持,只能是目录
权限控制可设置为只读,默认为读写权限无控制,均为读写权限
移植性移植性弱,与host path绑定移植性强,无须指定host目录

tmpfs mount

tmpfs表示将信息临时存储起来,并保存在宿主机的内存中。需要注意的两点:

  • 此处保存的数据无法持久化,只能是临时存储
  • 目前只支持宿主机是linux系统

添加

也是通过--mount的方式进行添加,不同点在于其类型为tmpfs,且没有source项

docker container create--mount type=tmpfs,target=/app-e MYSQL_ROOT_PASSWORD=SECRETmysql:5.7

容器间共享数据的方法

bind mount方式

就是将需要共享的数据存储在宿主机特定目录下,然后需要访问这部分数据的容器都通过bind mount绑定这个数据。

volume container方式

就是说创建一个专门为其他容器提供volume的容器,它可以是bind mount方式,也可以是volume方式。

## 创建一个volume container并绑定多个形式的共享数据docker container create-v ~/hostData:/hostData-v containerData:/containerData--name vc_data<image_name>

然后其他容器利用--volumes-from参数绑定到volume container上即可,这样所有这样创建的容器就都有了volume container一样的数据了。

## 创建与volume container共享数据的容器
docker container create--volumes-from <volume container name><image_name>

http://www.lryc.cn/news/192979.html

相关文章:

  • 微信小程序获取当前日期时间
  • Unity关键词语音识别
  • SpringBoot的配置文件——.yml和.properties
  • Retrieve Anything To Augment Large Language Models
  • 什么是面向对象编程
  • c++视觉处理----固定阈值操作:Threshold()函数,实时处理:二值化,反二值化,截断,设为零,反向设为零
  • KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(8)
  • 【问题解决】Ubuntu 安装 SeisSol 依赖 easi 报错解决: undefined reference to `H5free_memory‘
  • 循环小数(Repeating Decimals, ACM/ICPC World Finals 1990, UVa202)rust解法
  • [GAMES101]透视投影变换矩阵中为什么需要改变z值
  • sklearn处理离散变量的问题——以决策树为例
  • QT 数据库表格----QSqlTableModel
  • Vue_Bug Failed to fetch extension, trying 4 more times
  • 缩短从需求到上线的距离:集成多种工程实践的稳定框架 | 开源日报 No.55
  • 基于秃鹰优化的BP神经网络(分类应用) - 附代码
  • C++笔记之std::future的用法
  • openssl学习——消息认证码原理
  • Netty使用SslHandler实现加密通信-单向认证篇
  • Jetpack:007-Kotlin中的Button
  • opencv图形绘制2
  • “华为杯”研究生数学建模竞赛2019年-【华为杯】A题:无线智能传播模型(附优秀论文及Pyhton代码实现)(续)
  • 爬虫 | 正则、Xpath、BeautifulSoup示例学习
  • nginx的location的优先级和匹配方式
  • 深入了解Spring Boot Actuator
  • 【SQL】NodeJs 连接 MySql 、MySql 常见语句
  • SSH 基础学习使用
  • JavaFX: 使用本地openjfx包
  • 【HCIA】静态路由综合实验
  • Django框架集成Celery异步-【2】:django集成celery,拿来即用,可用操作django的orm等功能
  • 获取本地缓存数据修改后,本地缓存中的值也修改问题