什么是Docker Volume?
摘要:Docker Volume,通常翻译为数据卷,用于保存持久化数据。当我们将数据库例如MySQL运行在Docker容器中时,一般将数据通过Docker Volume保存在主机上,这样即使删除MySQL容器,数据依然保存在主机上,有效保证了数据的安全性。这篇博客将通过简单的实践帮助大家理解什么是Docker Volume。

本文所有命令都是在play-with-docker的在线Docker实例上执行,Docker版本为17.05.0-ce。
1. 指定Docker Volume
使用docker run命令,可以运行一个Docker容器
|
docker run -itd --volume /tmp/data1:/tmp/data2 --name test ubuntu bash
|
- 基于ubuntu镜像创建了一个Docker容器。
- 容器的名称为test,由–name选项指定。
- Docker Volume由–volume选项指定,主机的/tmp/data1目录与容器中的/tmp/data2目录一一对应。
2. 查看Docker Volume
使用docker inspect命令,可以查看Docker容器的详细信息:
|
docker inspect --format='{{json .Mounts}}' test | python -m json.tool
[
{
"Destination": "/tmp/data2",
"Mode": "",
"Propagation": "",
"RW": true,
"Source": "/tmp/data1",
"Type": "bind"
}
]
|
- 使用–format选项,可以选择性查看需要的容器信息。.Mount为容器的Docker Volume信息。
- python -m json.tool可以将输出的json字符串格式化显示。
- Source表示主机上的目录,即/tmp/data1。
- Destination为容器中的目录,即/tmp/data2。
3. 本机文件可以同步到容器
在本机/tmp/data1目录中新建hello.txt文件
|
touch /tmp/data1/hello.txt
ls /tmp/data1/
hello.txt
|
hello.txt文件在容器/tmp/data2/目录中可见
使用docker exec命令,可以在容器中执行命令。
|
docker exec test ls /tmp/data2/
hello.txt
|
可知,在本机目录/tmp/data1/的修改,可以同步到容器目录/tmp/data2/中。
4. 容器文件可以同步到主机
在容器/tmp/data2目录中新建world.txt文件
|
docker exec test touch /tmp/data2/world.txt
docker exec test ls /tmp/data2/
hello.txt
world.txt
|
world.txt文件在主机/tmp/data1/目录中可见
|
ls /tmp/data1/
hello.txt world.txt
|
可知,在容器目录/tmp/data2/的修改,可以同步到主机目录/tmp/data1/中。
5. 结论
Docker Volume本质上是容器与主机之间共享的目录或者文件,这样Docker Volume中的数据可以在主机和容器中实时同步。使用Virtualbox创建虚拟机时,也可以配置共享目录,这与Docker Volume非常相似。
关于Fundebug
Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了7亿+错误事件,得到了Google、360、金山软件、百姓网等众多知名用户的认可。欢迎免费试用!

版权声明:
转载时请注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/06/07/what-is-docker-volume/
什么是Docker Volume?的更多相关文章
- rexray在CentOS上不能创建ceph rbd的docker volume问题定位
背景 我们通过docker的rexray插件来创建ceph rbd设备的docker volume,但总提示创建失败. # docker volume create --driver=rexray - ...
- docker volume创建、备份、nfs存储
docker存储volume #环境 centos7.4 , Docker version 17.12.0-ce docker volume创建.备份.nfs存储 #docker volume 数据存 ...
- 理解OpenShift(5):从 Docker Volume 到 OpenShift Persistent Volume
理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ...
- [自学]Docker system 命令 查看docker镜像磁盘占用情况 Docker volume 相关
内容From https://docs.docker.com/engine/reference/commandline/system_df/ docker的image和docker的container ...
- Docker学习笔记之docker volume 容器卷的那些事(二)
预览目录 更改目录拥有者 Data Container 切换用户 参考文章 0x00 概述 如果你读了docker volume 容器卷的那些事(一),我想应该不会遇到下面这些问题的,毕竟是具有指导意 ...
- Docker学习笔记之docker volume 容器卷的那些事(一)
预览目录 volume 方式 相关用例 使用方式 使用 volume driver bind mount 方式 相关用例 使用方式 配置selinux标签 配置macOS的安装一致性 tmpfs 方式 ...
- 深入理解Docker Volume(一)
想要了解Docker Volume,首先我们需要知道Docker的文件系统是如何工作的.Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载镜像层并在其上添 ...
- (转)Docker volume plugin - enabled create local volume on docker host
原文地址:https://hub.docker.com/r/cwspear/docker-local-persist-volume-plugin/ Short Description Create n ...
- 利用Docker volume修改Nginx Docker镜像里index.html
通过这个小例子我们可以进一步加深对Docker volume概念的理解和使用方法. 我们都知道运行基于Docker的Nginx镜像后,访问localhost能看到Nginx默认的首页,这个首页的位置是 ...
随机推荐
- weexpack打包weex项目运行/打包记录
构建weex项目 安装weex-toolkit cnpm install -g weex-toolkit 初始化一个项目只需新建文件夹并在目录下执行 weex init 即可 安装依赖:cnpm in ...
- 安全运维中基线检查的自动化之ansible工具巧用
i春秋作家:yanzm 原文来自:安全运维中基线检查的自动化之ansible工具巧用 前几周斗哥分享了基线检查获取数据的脚本,但是在面对上百台的服务器,每台服务器上都跑一遍脚本那工作量可想而知,而且都 ...
- 【sql注入】浅谈sql注入中的Post注入
[sql注入]浅谈sql注入中的Post注入 本文来源:i春秋学院 00x01在许多交流群中,我看见很多朋友对于post注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在 ...
- centos7使用wordpress布署网站(1)
环境说明: 在同一台主机上实现LAMP(Linux + Apache + MariaDB + PHP)腾迅云主机CentOS 7.4.Apache .MariaDB .PHP 1.安装apache.m ...
- 7.首页、bitmaputils
HomeProtocol public class HomeProtocol extends BaseProtocol<List<AppInfo>>{ // 1 把整个json ...
- Web前端-Vue.js必备框架(二)
Web前端-Vue.js必备框架(二) vue调式工具vue-devtools 过滤器:vue.js允许你自定义过滤器,可被用作一些常见的文本格式化. mustache插值和v-bind表达式. vu ...
- Python的串口通信(pyserial)
串口通信是指外设和计算机间,通过数据信号线 .地线.控制线等,按位进行传输数据的一种通讯方式.这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低.串口是计算机上一种非 ...
- 一道题引出对LinkedList源码的研究
题目:打开一个文本文件,每次读取一行内容,将每行作为一个String读入,并将那个String对象置入一个LinkedList中,按照相反的顺序打印出LinkedList中的所有行. 解题代码: pu ...
- Python编程Day5——可变与不可变类型、数据类型整合
一.可变与不可变类型1.可变类原值型:只改变,但id不变,证明就是在改变原值,是可变类型2.不可变类型:值改变,但id也跟着改变,证明是产生了新的值,是不可变类型 x= print(id(x)) x= ...
- 【干货】利用MVC5+EF6搭建博客系统(三)添加Nlog日志、缓存机制(MemoryCache、RedisCache)、创建控制器父类BaseController
PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.回顾系统进度以及本章概要 目前博客系统已经数据库创建.以及依赖注入Autofac集成,接下来就是日志和缓存集成,这里日志用的是N ...