Docker系统七:Docker数据管理
Docker的数据管理
I. 基本概念
Docker容器一旦删除,其相关的rootf文件系统就会被删除,其容器内的数据将一并删除,为了保存相关数据,Docker提出了数据卷的概念。
II. 数据卷
Docker中与数据卷相关的参数:
-v=[]; 创建数据卷
--volumes-from; 数据卷容器
1)创建数据卷
-v 参数:
* host-dir: 表示host上的目录,如果不存在,Docker会自动在Host上创建该目录;
* container-dir:表示容器内部对应的目录,如果不存在,Docker会在容器内部创建此目录;
* rw|ro :用于对控制卷的读写权限;
不指定host-dir去创建一个数据卷:
$docker run -it --rm -v /volume1 --name test1 ubuntu:14.04 /bin/bash
$df -lf
Filesystem Size Used Avail Use% Mounted on
none 40G 4.9G 33G 14% /
tmpfs 497M 0 497M 0% /dev
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/vda1 40G 4.9G 33G 14% /volume1
shm 64M 0 64M 0% /dev/shm
tmpfs 497M 0 497M 0% /sys/firmware
$ls /volume1/
$echo "volume1" > /volume1/test.ext
$ls /volume1/
test.txt
通过查看发现Host的根分区被挂载到了容器的/volume1. 实际上Docker会在Host的/var/lib/docker/vfs/dir/(centos, 其他系统可能不同)目录中随机生成一个目录,然后挂载容器的/volume1;
可以查看容器详细配置Mounts捉的Source:
$docker inspect test1
"Mounts": [
{
"Type": "volume",
"Name": "5bf4ad339dad3c7fbecb0537c1a0a0065e70109beb4194475d1de153542b582b",
"Source": "/var/lib/docker/volumes/5bf4ad339dad3c7fbecb0537c1a0a0065e70109beb4194475d1de153542b582b/_data",
"Destination": "/volume1",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
这种方式创建的数据卷当没有基他容器依赖时,会随容器的删除而删除,同时对应的Host目录也会被删除,如查不想Host的目录被删除,需要启动时指定Host目录。
2)挂载Host的目录做为数据卷
$docker run -it --rm -v /data/volume1:/volume1 ubuntu:14.04 /bin/bash
$df -lh
tmpfs 497M 0 497M 0% /dev
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/vda1 40G 5.3G 32G 15% /volume1
shm 64M 0 64M 0% /dev/shm
tmpfs 497M 0 497M 0% /sys/firmware
$ls /volume/
$echo "hello"> /volume1/hello.txt
$exit
$ls /data/volume1/
hello.txt
$cat /data/volume1/hello.txt
hello
这样即使容器被删除,host内的目录仍然含有容器的相关数据文件,这种也是容器与Host进行数据交换的一种方式。实际上Docker内部是通过mount --bind来实现的。
容器对挂载的数据据具有读写权限控制:如挂载目录为只读权限
$docker run -it --rm -v /data/volume1:/volume1:ro ubuntu:14.04 /bin/bash
$df -lh
$touch /volume1/hello.txt
touch: cannot touch 'test.text': Read-only file system
3) 挂载Host的文件作为数据卷(此方法一般用于Host与容器间共享配置文件)
- 通过挂载Host 的bash历史命令文件,在容器中查看Host的bash历史命令,当容器删除时,Host也能查看容器的执行命令历史
docker run --rm -it -v ~/.bash_history:/root/.bash_history ubuntu:14.04 /bin/bash
- 同步Host与容器里的时区,挂载/etc/localtime到容器内部
docker run -it --rm -v /etc/localtime:/ect/localtime ubuntu:14.04 /bin/bash
III. 数据卷容器
--volumes-from 参数用于数据卷有关的场景
1) 创建和挂载数据卷
- 创建一个dabdata的容器,其包含一个/dbdata的数据卷
$docker run -d -v /dbdata --name dbdata training/postgres echo Data-only container for postgres
- 通过--volumes-from在其他容器中挂载/dbdata的数据卷
docker run -d --volumes-from dbdata --name db1 training/postgres
docker run -d --volumes-from dbtata --name db2 training/postgres
docker run -d --name db3 --volumes-from db1 training/postgres
如此这样,db1和db2都能看到容器dbdata所有的数据卷(/dbdata)的内容,db3 是从其他已经挂载容器卷的容器挂载数据卷。
当我们删除挂载数据卷的容器时,数据卷不会被删除,只能所有引用的容器被删除后,通过docker rm -v 显式删除数据卷。
2)数据卷容器的使用
使用数据卷进行多容器日志收集
构建rsyslog镜像(使用Dockerfile)
- Dockerfile 内容
#forrsyslog
FROM centos6
MAINTAINER hustcat
RUN yum -y install rsyslog && yum clean all
CMD rsyslogd -n
VOLUME /dev
VOLUME /var/log
- run Dockerfile
docker build -t hustcat/rsyslog
运行rsyslog容器
docker run --name rsyslog -d -v /tmp/syslogdev:/devhustcat/rsyslog
ls /tmp/syslogdev/log -lh
从其他容器写log到日志容器
docker run --rm -v /tmp/syslogdev/log:/dev/log centos6 logger -p info "hello rsyslog"
IV. 备份、恢复和迁移数据卷
1). 备份
docker run --volumes-from dbdata -v ${pwd}:/backup ubuntu tar cvf /backup/backup.tar /dbdata
- 创建一下新容器, 将Host本地目录挂载到/backup;
- 将数据卷容器dbdata的数据卷/dbdata打包到/backup/backup.tar
- 在Host的当前目录即可看到backup.tar
2). 恢复
将backup.tar的数据恢复到一个新的容器dbdata2中
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
docker run --volumes-from dbdata2 -v ${pwd}:/backup busybox tar xvf /backup/backup.tar
Docker系统七:Docker数据管理的更多相关文章
- BI系统打包Docker镜像及容器化部署的具体实现
在过去的几年中,"云"作为明星热词站在了各种新潮技术之中,你可能使用过,但说不清它的原理:或者是没用过,但听过它的大名:也可能连它的名字都没听过,但你对这只蓝色鲸鱼一定十分眼熟.作 ...
- 【新技术】CentOS系统下docker的安装配置及使用详解
1 docker简介 Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器.它原本是dotCloud 启动的一个业余项目,并在前些时候开源了.它吸引了大量的关注和讨 ...
- centos7系统下 docker 环境搭建
运行环境: VMware Workstation Pro 在虚拟机中安装centos7系统, 选择最小安装, 网络连接方式选择的桥接(与宿主机在同一IP段)centos7一定要安装64位, docke ...
- Centos系统下Docker的安装
一.检查内核版本 安装Docker,需要linux内核大于3.10 使用uname -r 来检查 二. Centos系统下Docker的安装 1. 安装需要的软件包 yum install -y yu ...
- CentOS系统下docker的安装与卸载
Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...
- 系统学习Docker 践行DevOps理念
Docker代表的容器技术是近两年的大热技术,和人工智能.区块链等热点不同,容器技术的门槛并不高,每一个开发.测试.运维人员都能在日常工作中掌握和使用,是当今IT从业人员的必备技能之一.本课程会带大家 ...
- 在Mac OSX系统的Docker机上启用Docker远程API功能
在Mac OSX系统的Docker机上启用Docker远程API功能 作者:chszs,未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs D ...
- Docker -- 系统整洁之道 -- 1
在上文Docker – 系统整洁之道 – 0中已经对Docker是什么,安装Docker以及怎么运行一个简单的容器有了初步了解,这篇文章介绍Docker的一些命令和Docker镜像的使用及操作. 一些 ...
- (七) Docker 部署 MySql8.0 一主一从 高可用集群
参考并感谢 官方文档 https://hub.docker.com/_/mysql y0ngb1n https://www.jianshu.com/p/0439206e1f28 vito0319 ht ...
随机推荐
- 一、Html简介
html什么东西呢? hypertext markup language(超文本标记语言).超级文本标记语言是标准通用标记语言下的一个应用,也是一种规范,一种标准, 它通过标记符号来标记要显示的网页中 ...
- android imageview按钮按下动画效果
private ImageView today_eat: today_eat = (ImageView) view.findViewById(R.id.today_eat); today_eat.se ...
- js按位运算符及其妙用
大多数语言都提供了按位运算符,恰当的使用按位运算符有时候会取得的很好的效果. 在我看来按位运算符应该有7个: 1.& 按位与 &是二元运算符,它以特定的方式的方式组合操作数中对应的位, ...
- JavaSE基础篇—流程控制语句—方法的定义 调用和重载
1.定义方法 是封装在一起来执行操作语句的集合,用来完成某个功能操作,简单的说就是提取出来的有特定功能的代码(程序).在某些语言中被称为函数或者过程,比较特殊的方法是main方法(主方法),main方 ...
- LINUX下SYN攻防战 [转]
LINUX下SYN攻防战 (一)SYN攻击原理SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费服务器CPU和内存资源.SYN攻击聊了能影响主机外,还可 ...
- 小白的.Net Core 2.0 ConsoleApp入门(keng)指南(一)
一.准备工作 准备工作很简单,甚至可以不用Visual Studio,一只.NET CORE和Runtime即可(你有考虑过世界第一IDE的感受吗) 下载:https://www.microsoft. ...
- HashMap原理总结
来总结一下HashMap的原理 1.HashMap当中有一个内部类,它叫Node,然后这个Node呢,它其实是实现了Map.Entry接口,这个接口当中有几个抽象的方法和几个具体的方法.其中Map.E ...
- Cypher查询语言--Neo4j之聚合函数(五)
目录 聚合Aggregation 计数 计算节点数 分组计算关系类型 计算实体数 计算非空可以值数 求和sum 平均值avg 最大值max 最小值min 聚类COLLECT 相异DISTINCT 聚合 ...
- iOS-时间戳(或date)转字符串
1.时间戳转字符串 ///时间戳转化为字符转0000-00-00 00:00 + (NSString *)time_timestampToString:(NSInteger)timestamp{ NS ...
- BZOJ 2287. [HZOI 2015]疯狂的机器人 [FFT 组合计数]
2287. [HZOI 2015]疯狂的机器人 题意:从原点出发,走n次,每次上下左右不动,只能在第一象限,最后回到原点方案数 这不煞笔提,组合数写出来发现卷积NTT,然后没考虑第一象限gg 其实就是 ...