Centos7——docker持久化存储和卷间状态共享(笔记)
docker持久化存储和卷间状态共享(笔记)
本章介绍
- 存储卷的介绍
- 存储卷的两种类型
- 宿主机好额容器之间如何共享数据
- 容器之间如何共享数据
- 存储卷的声明周期
- 存储卷之间的数据管理和控制模式
就像在容器中运行数据库程序一样,你可以将这个软件打包在镜像中,当启动容器时,它将会初始化一个空数据库。当其他程序接入该数据库并存入数据,这些数据要如何才能保存下来呢?是以容器中一个文件的形式吗?当你暂停一个容器或者删除这个容器,这些数据要怎么办?如果你想要升级数据库程序,这些数据怎么搬迁?一组不同的Web应用程序运行在不同的容器中,为了让它们的日志文件保存在容器之外,你准备把他们写到哪儿去呢?你将如何取得这些日志来排除故障呢?如何让其他程序(比如日志摘要工具)来访问这些文件呢?这些问题的答案就涉及存储卷的使用。
一、存储卷的简介
一个主机或容器的目录树是由一组挂载点创建而成,这些挂载点描述了如何能构建出一个或多个文件系统。存储卷是容器目录树上的挂载点,其中一部分主机目录树已经被挂载了。大多数人只熟悉一点点文件系统和挂载点,很少对其进行定制。比起任何其他Docker话题,存储卷会更难一点。这与对挂载点的缺乏了解有关。
docker如果没有存储卷会发生什么呢?
Docker用户会受限于Union文件系统,仅提供镜像挂载。如下图所示容器中运行着一个程序,正写数据到文件中。第一个文件写入到根文件系统。操作系统控制根文件系统将改变的部分装入Union文件系统的顶层。第二个文件则写入到已经挂载于容器目录树/data中。改动会通过存储卷直接影响到主机文件系统上。

虽然Union文件系统适用于构建和分享镜像,但对于持久化或共享数据而言,并不是理想的办法。存储卷填补了这些用例,并在容器化系统涉及中发挥了关键作用。
1.1 存储卷提供容器无关的数据管理方式
从语义上来说,存储卷是一个数据分割和共享的工具,有一个与容器无关的范围或声明周期。这使得存储卷成为了容器化系统设计中关于文件分享或写入最重要的一部分。数据示例根据其范围或者接入容器方式的不同,分成以下几种:
- 数据软件与数据库中的数据
- web应用程序苏与日志数据
- web数据处理应用程序的输入和输出数据
- web服务器与静态内容
- 产品与支持工具
存储卷可以分离关注点,并为架构组件创建模块化。这种模块化设计帮助你更轻松地了解、构建、支持和重用大型系统的部件。
二、存储卷的类型
每一个存储卷就是容器目录树的挂载点在主机目录树中的位置,但不同的是存储卷类型在主机的位置是不同的。
- 绑定挂载存储卷;
- 管理存储卷。
管理存储卷使用由Docker守护进程控制的位置,被称为Docker管理空间。存储卷类型图示如下:
每种存储卷类型都有优缺点。需要根据具体实际使用情况选择使用。
2.1 绑定挂载卷
绑定挂在卷是一种存储卷,指向主机文件系统上用户指定的位置。绑定挂载卷在主机提供的文件或目录需要挂载到容器目录的特定位置时,非常有用。
优点:
如果你想将数据分享给运行在容器外的京城,比如主机系统组件,绑定卷是非常有用的。
如果你想将主机数据通过已知的主机目录分享给容器中运行的特定程序,绑定卷也管用。
缺点:
使用绑定挂载卷的一个问题就是它们将可移植容器绑定到特定主机的文件系统,无法跨主机移植。
创造了与其他容器发生冲突的机会。
绑定挂载卷比较适合需要使用特殊挂载点的工作站或机器。最好在通用平台或硬件池避免这类特定的绑定。
[root@192.168.0.155]$~:>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest 71c43202b8ac 4 days ago 109 MB
docker.io/centos latest 5182e96772bf 3 weeks ago 200 MB
docker.io/tutum/centos latest 99a633ad346f 2 years ago 297 MB
[root@192.168.0.155]$~:>docker run -d --name bmweb \
> -v ~/example-docs:/usr/local/nginx/htdocs \
> -p 80:80 \
> nginx:latest
869c499fb412874dde2c210ec4e7ff316cf5748d49f83a269ffb91543ab8582f
[root@192.168.0.155]$~:>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
869c499fb412 nginx:latest "nginx -g 'daemon ..." 6 seconds ago Up 4 seconds 0.0.0.0:80->80/tcp bmweb
注意:
使用-v选项和位置映射来创建绑定挂载卷。该映射以冒号分割(这是Linux命令行工具的常见风格)。映射键(冒号之前的路径)是主机文件系统上的一个绝对路径,该键值(冒号后的路径)是容器中挂载的目标存储位置。你必须使用绝对路径执行该位置。
这个示例展示了存储卷的一个重要属性或特征。当你在一个容器文件系统挂载存储卷,它取代了镜像在该位置提供的内容。这种行为是后面将讨论多态容器模式的基础。
假设你想确保web服务器不能更改此卷的内容?
Docker提供了一种机制将挂载卷和存储卷设为只读权限,你可以通过在存储卷映射规则后追加:ro来完成。
[root@192.168.0.155]$~:>docker run -d --name bmweb -v ~/example-docs:/usr/local/nginx/htdocs:ro -p 80:80 nginx:latest
8bd9eaddd73f4142760ec10d504a55508cea98824f9fac03418a3afa5bcdb462
[root@192.168.0.155]$~:>
2.2 Docker管理卷
管理卷不同于绑定挂载卷,这是因为Docker守护进程会在主机文件系统中创建存储卷,并由Docker管理。
使用管理卷是一种在文件系统特定位置解耦卷的方法。当你执行docker run使用-v选项(或--volume),只要指定容器目录树中的挂载点,管理卷即可创建。
$ docker run -it --name container-test -h CONTAINER -v /data debian /bin/bash
root@CONTAINER:/# ls /data
root@CONTAINER:/#
上面的命令会将/data挂载到容器中,并绕过联合文件系统,我们可以在主机上直接操作该目录。任何在该镜像/data路径的文件将会被复制到Volume。我们可以使用docker inspect命令找到Volume在主机上的存储位置:
$ docker inspect -f {{.Volumes}} container-test
你会看到类似的输出:
map[/data:/var/lib/docker/vfs/dir/cde167197ccc3e138a14f1a4f...b32cec92e79059437a9]
这说明Docker把在/var/lib/docker下的某个目录挂载到了容器内的/data目录下。让我们从主机上添加文件到此文件夹下:
$ sudo touch /var/lib/docker/vfs/dir/cde167197ccc3e13814f...b32ce9059437a9/test-file
Centos7——docker持久化存储和卷间状态共享(笔记)的更多相关文章
- Docker持久化存储与数据共享
一.Docker持久化数据的方案 基于本地文件系统的Volume:可以在执行docker create或docker run时,通过-v参数将主机的目录作为容器的数据卷.这部分功能便是基于本地文件系统 ...
- 20.docker 持久化存储与数据共享
1.image layer 和 container layer 的关系 image layer 是可读的 container layer 是在image layer 之上创建的 一个可读可写层 con ...
- docker 持久化存储
1.data Volume mysql5.7:dockerfile FROM debian:stretch-slim # add our user and group first to make s ...
- 五十四.自定义镜像及仓库、持久化存储 、 Docker网络架构
1. 制作自定义镜像(base基础镜像,搭建共性环境) 基于centos镜像使用commit创建新的镜像文件 基于centos镜像使用Dockerfile文件创建一个新的镜像文件 1.1 使用镜像 ...
- Kubernetes 学习(十)Kubernetes 容器持久化存储
0. 前言 最近在学习张磊老师的 深入剖析Kubernetes 系列课程,最近学到了 Kubernetes 容器持久化存储部分 现对这一部分的相关学习和体会做一下整理,内容参考 深入剖析Kuberne ...
- 4.深入k8s:容器持久化存储
从一个例子入手PV.PVC Kubernetes 项目引入了一组叫作 Persistent Volume Claim(PVC)和 Persistent Volume(PV)的 API 对象用于管理存储 ...
- 理解Docker(8):Docker 存储之卷(Volume)
(1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 ...
- Docker 存储之卷(Volume)
理解Docker(8):Docker 存储之卷(Volume) (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespa ...
- s5 Docker的持久化存储和数据共享
数据库容器的数据如何才能不会丢失?Docker的持久化存储技术.Docker的数据共享技术能极大提高开发人员的开发效率,边写代码,边看运行结果. 数据持久化之Data Volume Docker持久化 ...
随机推荐
- 二 MyBatis 从入门到进阶 2 Maven 入门
1 Maven 的使用 1.1 本地仓库与中央仓库 本地仓库:Window \ Preferences \ Maven \ User Settings \ Local Repository 中央仓库: ...
- 一加手机刷入第三方Rec
首先阐述一下刷机的整体流程: 备份数据(可选):短信.联系人.通话记录.图片.应用数据的云端同步. 解锁 刷入第三方Recovery(简称Rec). 进入第三方Rec,刷第三方ROM. 刷机成功 解锁 ...
- ssh远程连接的故障排查详解
排查故障: 1.两个机器之间是否通畅,看物理网络(网线网卡,IP是不是正确) ping ip -t 来检测物理网络是否通畅 通 不通 不通: 1.客户端到服务器端物理链路有问题 网卡 ,IP , 网 ...
- nginx加php(一)
yum install nginx 安装php7.3https://kifarunix.com/installing-php-7-3-3-on-centos-7-6/ yum install epel ...
- Spring_four
Spring_four 基于XML的AOP实现事务控制 坐标xml ; //2.6更新转入账户 accountDao.updateAccount(target); } } 注意:方法级别的事务会覆盖类 ...
- Kick Start 2019 Round F Teach Me
题目链接 题目大意 有 $N$ 个人,$S$ 项技能,这些技能用 $1, 2, 3, \dots, S$ 表示 .第 $i$ 个人会 $c_i$ 项技能($ 1 \le c_i \le 5 $).对于 ...
- mysql行(记录)的详细的操作
目录 一 介绍 二 插入(增加)数据INSERT 三 更新(修改)数据UPDATE 四 删除数据DELETE 五 查询数据SELECT(重点) 六 权限管理 阅读目录 一 介绍 MySQL数据操作: ...
- WPF使用资源图片
一.加载本项目的图片 WPF引入了统一资源表示Uri来标识和访问资源.其中较为常见的情况是用Uri加载图像.Uri表达式的一把形式为:协议+授权+路径 协议:pack:// 授权:有两种,一种用于访问 ...
- python发起post请求获取json数据使用requests方法
最普通的答案 我一直就觉得GET和POST没有什么除了语义之外的区别,自打我开始学习Web编程开始就是这么理解的 . 可能很多人都已经猜到了答案是: 1.GET 使用URL或Cookie传参.而POS ...
- Spring Boot整合dubbo(注解的方式)
一.创建项目 1.创建一个空的项目 2.在空的项目中添加两个Spring Boot模块,如下图所示 二.在provider模块中的pom文件中添加依赖 <dependency> <g ...