IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Docker数据卷(volume)管理 -> 正文阅读

[系统运维]Docker数据卷(volume)管理


Docker基础知识可以点击看我之前的文章

什么是数据卷

数据卷( volume ):volume是存在于一个或多个容器中的特定文件或文件夹,这个目录以独立于联合文件系统的形式在宿主机中存在,并为数据的共享与持久化提供便利。

为什么要用数据卷

  • Docker分层文件系统存在的问题:
    Docker的镜像是由一系列的只读层组合而来的,当启动一个容器时, Docker加载镜像的所有只读层,并在最上层加入一个读写层。这个设计使得Docker可以提高镜像构建、存储和分发的效率,节省了时间和存储空间,然而也存在如下问题:
    1、性能差。
    2、多个容器之间的数据无法共享。
    3、生命周期与容器相同。当删除容器时,容器产生的数据将丢失。
  • 数据卷机制的好处:
    1、mount到主机中,绕开分层文件系统。
    2、volume能在不同的容器之间共享和重用
    3、和主机磁盘性能相同。
    4、对volume中数据的操作不会影响到镜像本身。
    5、volume的生存周期独立于容器的生存周期,即使删除容器,volume仍然会存在,没有任何容器使用的volume也不会被Docker删除
    Docker提供了volumedriver接口,通过实现该接口,我们可以为Docker容器提供不同的volume存储支持。当前官方默认实现了local这种volumedriver,它使用宿主机的文件系统为Docker容器提供volume。

数据卷管理的两种方式

Docker的volume的本质是容器中一个特殊的目录。在容器的创建过程中,Docker会将宿主机上的指定目录(一个以volume ID为名称的目录,或者指定的宿主机目录)挂载到容器中指定的目录上(使用bing mount挂载方法),故挂载完成后的宿主机目录和容器内的目标目录表现一致。

1、绑定挂载bind mount

bind mount是将主机上的目录或文件mount到容器里。使用直观高效,易于理解。
使用-v选项指定挂载路径,格式 <host path>:<container path>
#前面是宿主机真实存在的路径:后面是容器内的路径

后台运行一个使用nginx镜像的容器并将宿主机的/data目录挂载到容器的目录/usr/share/nginx/html下
[root@server1 ~]# docker run -d --name demo -v /data:/usr/share/nginx/html nginx

在这里插入图片描述
调到前台运行,分别查看宿主机和容器的指定的目录下的内容,是一样的。这是因为这种方式挂载和我们平时使用mount方式是一样的,原有数据隐藏,替换为宿主机的数据。
##/data目录下这么多东西是因为docker默认数据目录是/data

[root@server1 ~]# docker exec -it demo bash

在这里插入图片描述
bind mount默认权限是读写rw,可以在挂载时指定只读ro。

-v选项指定的路径,如果不存在,挂载时会自动创建。
docker run -it --name vm1 \ /etc/yum.repos.d/dvd.repo:/etc/yum.repos.d/dvd.repo:ro rhel7 bash

2、docker managed volume

bind mount必须指定host文件系统路径,限制了移植性。
docker managed volume不需要指定mount源,docker自动为容器创建数据卷目录。默认创建的数据卷目录都在 /var/lib/docker/volumes 中。
如果挂载时指向容器内已有的目录,容器内原有数据会被复制到volume中。
创建卷方式:

[root@server1 ~]# docker volume create webdata		#创建一个名为webdata的卷
[root@server1 ~]# docker rm -f demo		#把上面创建的卷删掉
[root@server1 ~]# docker run -d --name demo -v webdata:/usr/share/nginx/html nginx		
#把webdata这个卷挂载到容器内的/usr/share/nginx/html目录上并运行一个容器

将创建的webdata卷挂载到容器的/usr…目录下
在这里插入图片描述
进入docker默认创建的数据卷目录查看卷里的内容,我们可以看到上面只创建了卷,没有写入任何东西,但卷里有内容是因为挂载时容器内指定目录里原本有东西,所以复制过来的
在这里插入图片描述
我们运行容器使用的是nginx镜像,访问一下,没有问题
在这里插入图片描述
如果挂载时没指定mount源,那么docker会自动随机创建一个文件名很长的卷

[root@server1 ~]# docker rm -f demo
[root@server1 ~]# docker run -d --name demo -v /usr/share/nginx/html nginx
67ab13a7b24c19c53f4ce117136b9d0e4dec93c615a0192ead919d10e6c2acae

在这里插入图片描述
我们使用docker inspect demo命令查看下卷的源目录
在这里插入图片描述
得到路径后就可以查看目录下的内容了

ls /var/lib/docker/volumes/2ca22fd769e4b7b6f5a02dd96fe8d47a6df5578074c0d340ced3ab33b25456ca/_data

在这里插入图片描述

bind mount 与 docker managed volume 对比

相同点:两者都是 host 文件系统中的某个路径。
不同点如图:
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-27 16:38:53  更:2021-07-27 16:39:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 1:50:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码