Docker实践之07-数据管理
目录
一.数据卷概述
数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性:
- 数据卷可以在容器之间共享和重用
- 对数据卷的修改会立马生效
- 对数据卷的更新,不会影响镜像
- 数据卷默认会一直存在,即使容器被删除
注意: 数据卷的使用,类似于Linux下对目录或文件进行mount,镜像中被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的数据卷。
二.创建数据卷
使用命令docker volume create创建数据卷,如:
$ docker volume create test-vol
test-vol
三.查看数据卷
使用命令docker volume ls查看所有的数据卷,如:
$ docker volume ls
DRIVER VOLUME NAME
local my-vol
在主机里使用命令docker volume inspect可以查看指定数据卷的详细信息,如:
$ docker volume inspect test-vol
[
{
"CreatedAt": "2018-05-03T16:42:05+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/test-vol/_data",
"Name": "test-vol",
"Options": {},
"Scope": "local"
}
]
使用的docker volume create test-vol创建的数据卷默认挂载目录为“/var/lib/docker/volumes/test-vol/_data”。
注意: 数据卷的默认主机目录是:/var/lib/docker/volumes,但是在Mac下使用Docker Desktop时是不存在目录“/var/lib/docker/volumes”的,因为Mac上启动Docker本质上是启动了一个虚拟机,所以并不会在Mac主机本身存在数据卷的默认挂载目录,参考:Mac使用docker时,卷默认挂载路径/var/lib/docker/volumes不存在问题 。
四.挂载数据卷
所谓"挂载数据卷"是指将数据卷加载到容器的指定目录,在用docker run命令的时候,可以将数据卷挂载到容器里。在一次docker run中可以挂载多个数据卷。挂载数据卷可以使用2个选项:--mount或者--volume,推荐使用--mount。
如下创建一个名为web的容器,并加载一个数据卷到容器的/usr/local/tomcat/webapps目录:
$ docker run -d -P --name web --mount source=my-vol,target=/usr/local/tomcat/webapps tomcat
挂在数据卷之后,来看一下如下信息:
$ docker volume inspect my-vol
[
{
"CreatedAt": "2018-05-03T17:02:43+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
]
$ sudo ls /var/lib/docker/volumes/my-vol/_data -al
total 28
drwxr-x--- 7 root root 4096 May 3 17:02 .
drwxr-xr-x 3 root root 4096 May 3 16:34 ..
drwxr-x--- 14 root root 4096 May 3 16:58 docs
drwxr-x--- 6 root root 4096 May 3 16:58 examples
drwxr-x--- 5 root root 4096 May 3 16:58 host-manager
drwxr-x--- 5 root root 4096 May 3 16:58 manager
drwxr-x--- 3 root root 4096 May 3 17:04 ROOT
将数据卷加载到容器的指定目录之后,在数据卷的挂载点目录下就可以看到容器的对应目录下的内容。而且,此时对数据卷挂载目录下内容的修改会同步到容器的对应目录下。
显然,上面看到的数据卷中的信息正是容器的/usr/local/tomcat/webapps目录下的内容。
现在来修改/var/lib/docker/volumes/my-vol/_data/ROOT/index.jsp文件,可以看到修改的内容马上就生效。
现在停止容器,查看/var/lib/docker/volumes/my-vol/_data内容发现数据依然存在,删除容器之后再查看,数据依然存在。
五.删除数据卷
可以使用命令docker volume rm删除数据卷,如:
$ docker volume rm my-vol
my-vol
数据卷是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷。
如果需要在删除容器的同时移除对数据卷的引用,可以在删除容器的时候使用"-v"选项,即:docker rm -v。
注意: 在删除容器时使用"-v"选项并不会删除该容器使用的数据卷,仅仅是删除容器对数据卷的引用关系;因为容器删除之后,如果未使用"-v"选项移除对应的数据卷,那么再去删除数据卷时将会提示数据卷正在容器中被使用,不允许删除。
无主的数据卷可能会占据很多空间,需要使用命令docker volume prune进行清理:
$ docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
my-vol
test-vol
Total reclaimed space: 4.642MB
六.挂载主机目录或文件
1.挂载一个主机目录作为数据卷
使用--mount选项可以指定一个本地主机的目录挂载到容器中去,此时需要指定type=bind,如:
$ docker run -d -P --name web --mount type=bind,source=/home/test/webapps,target=/usr/local/tomcat/webapps tomcat
此时在主机目录上做的修改,在容器中就能够及时地被感知到.
Docker挂载主机目录的默认权限是读写,也可以通过增加readonly指定为只读,如:
$ docker run -d -P --name web --mount type=bind,source=/home/test/webapps,target=/usr/local/tomcat/webapps,readonly tomcat
2.挂载一个主机文件作为数据卷
--mount选项也可以从主机挂载单个文件到容器中,如:
$ docker run --rm -it --mount type=bind,source=$HOME/.bash_history,target=/root/.bash_history ubuntu:16.04 bash
这样就可以记录在容器输入过的命令了。
七.挂载数据卷与主机目录/文件的比较
相同点:
- 挂载数据卷或者主机目录/文件都是容器进行数据管理的方式
- 都可以通过"--mount"选项进行挂载
不同点:
- 挂载数据卷时不需要明确指定type参数,只需要指定source和target即可,例如:
--mount source=my-vol,target=/usr/local/tomcat/webapps。 - 挂载主机目录/文件时必须明确指定type参数为bind,例如:
--mount type=bind,source=/home/test/webapps,target=/usr/local/tomcat/webapps;另外,挂载的主机目录默认权限是读写,也可以通过增加readonly指定为只读:--mount type=bind,source=/home/test/webapps,target=/usr/local/tomcat/webapps,readonly。
【参考】
https://blog.csdn.net/zhangthree1/article/details/107542739 docker卷和目录的区别
https://yeasy.gitbook.io/docker_practice/data_management/volume 数据卷
Docker实践之07-数据管理的更多相关文章
- docker 实践四:数据管理
这篇是关于 docker 的数据管理. 注:环境为 CentOS7,docker 19.03. 一般容器中管理数据主要有两种方式: 数据卷(Data Volumes):容器内数据直接映射到本地主机环境 ...
- Docker实践,来自沪江、滴滴、蘑菇街架构师的交流分享
架构师小组交流会:每期选一个时下最热门的技术话题进行实践经验分享. 第一期主题:容器实践.Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化.可移植性是CI/CD,DevOps,微服务的重要 ...
- docker实践之docker-compose部署mysql
文章目录 docker实践之docker-compose部署mysql 1.安装部署docker 2.编写docker-compose文件 3.编写配置文件和初始化文件 4.启动数据库 5.检查初始化 ...
- 【容器云】传统金融企业的 Docker 实践
基于 Docker 的容器云-Padis 目前市面上基于容器云的产品有很多,对于平安而言,则是基于 Docker 的 Padis 平台.所谓 Padis,全称是 PingAn Distribution ...
- CI Weekly #3 | 关于微服务、Docker 实践与 DevOps 指南
CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...
- 来自沪江、滴滴、蘑菇街架构师的 Docker 实践分享
架构师小组交流会是由国内知名公司架构师参与的技术交流会,每期选择一个时下最热门的技术话题进行实践经验分享. Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化.可移植性是 CI/CD.Dev ...
- docker 实践(一)
docker 简介 容器虚拟化,比传统的虚拟化轻量 2013年出现,发展非常迅猛 Redhat在6.5版本开始支持docker 使用go语言开发,基于apache2.0协议 开源软件,项目代码在git ...
- Docker实践之02-使用镜像及定制
目录 一.获取镜像 二.使用镜像启动容器实例 三.列出镜像 四.删除本地镜像 五.定制镜像 通过commit命令定制镜像 通过Dockerfile定制镜像 docker build的工作原理 dock ...
- Docker实践之01-入门介绍
目录 一.Docker概述 镜像 容器 仓库 二.安装Docker 1.在CentOS上安装Docker 2.在Ubuntu上安装Docker 3.启动docker 4.建立Docker用户组 5.测 ...
- ASP.NET CORE做的网站运行在docker实践
用VS2017 建立了 DotNet Core 2.2 的网站后,如何转移到 Docker 下运行? 下面分两种方式来实践: 1.直接手动命今行,将本机目录映射进Docker,运行网站.2.制作 Im ...
随机推荐
- [转帖]TiDB 数据库核心原理与架构 [TiDB v6](101)笔记
https://www.jianshu.com/p/01e49a93f671 description: "本课程专为将在工作中使用 TiDB 数据库的开发人员.DBA 和架构师设计. 本门课 ...
- [转帖]MySQL ALTER TABLE: ALTER vs CHANGE vs MODIFY COLUMN
https://www.cnblogs.com/pachongshangdexuebi/p/5029152.html ALTER COLUMN 语法: ALTER [COLUMN] col_name ...
- [转帖]金仓数据库KingbaseES V8R6索引坏块故障处理
案例说明: 在执行表数据查询时,出现下图所示错误,索引故障导致表无法访问,后重建索引问题解决.本案例复现了此类故障解决过程. 适用版本: KingbaseES V8R3/R6 一.创建测试环境 # 表 ...
- [转帖]016 Linux 卧槽,看懂进程信息也不难嘛?top、ps
016 Linux 卧槽,看懂进程信息也不难嘛?top.pshttps://my.oschina.net/u/3113381/blog/5455267 1 扒开看看 top 命令参数详情 Linux ...
- error: Your local changes to the following files would be overwritten by merge
拉取代码出现 error: Your local changes to the following files would be overwritten by merge 解决方案 你团队其他成员修改 ...
- MySQL知识点总结(完整版)
MySQL学习笔记 登录和退出MySQL服务器 # 登录MySQL $ mysql -u root -p12345612 # 退出MySQL数据库服务器 exit; 基本语法 -- 显示所有数据库 s ...
- 【k哥爬虫普法】非法入侵计算机信息系统,获取1500万余条个人信息!
我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...
- [1] HEVD 学习笔记:HEVD 环境搭建
1. HEVD 概述 + 环境搭建 HEVD作为一个优秀的内核漏洞靶场受到大家的喜欢,这里选择x86的驱动来学习内核漏洞,作为学习笔记记录下来 实验环境 环境 备注 调试主机操作系统 Window ...
- 【学习日志】Java基本数据类型的自动装箱和拆箱
// 测试代码 public static void main(String[] args) { Integer a = 1; Integer b = 2; Integer c = 3; Intege ...
- 强化学习从基础到进阶-案例与实践[4.2]:深度Q网络DQN-Cart pole游戏展示
强化学习从基础到进阶-案例与实践[4.2]:深度Q网络DQN-Cart pole游戏展示 强化学习(Reinforcement learning,简称RL)是机器学习中的一个领域,区别与监督学习和无监 ...