Docker容器的数据管理
来源:互联网 发布:软件测试辛苦吗 编辑:程序博客网 时间:2024/06/05 18:33
Docker容器的数据管理
先说点题外话,楼主前段时间听着学校的银行工作人员在宣传可以办个银行卡,这样的话,外地存款是没有手续费的,楼主想这样挺好的,就办了一行,办了一张楼主一次都没用过,结果今天给楼主来短信时候楼主欠了80块钱,需要还款,楼主很莫名其妙啊,怎么回事?楼主打电话问了一下农业银行的工作人员,工作人员告诉我确实得还款,因为那张卡是张信用卡,信用卡需要交纳80的年费,好吧,我在这里想说的是,隔行如隔山,不要被某些单位,某些个人欺骗了,我问了一下我的一个懂这方面的同学,我同学说,你办一张信用卡,人家最少可提成50元,所以人家会努力让你班信用卡,我日,我说当初这些人为啥不说一年需要交纳80元的手续费,如果说了的话,估计没人办了,唉,社会如此险恶!!如果你是一个和楼主一样没用过信用卡的屌丝,赶快把手里的信用卡注销了吧,楼主再说一句,不要乱办卡!!!东西可以乱吃,卡不要乱办.
Docker容器的数据卷
数据卷就是一个可供容器使用的目录,它绕过了文件系统,特性如下:
1.数据卷可以在容器之间共享和重用
2.对数据卷的修改会立马生效
3.对数据卷的更新不影响镜像
4.卷会一直存在,知道没有容器使用
主要作用使用来共享的.
类似linux下的挂载(mount)
演示
为容器中添加数据卷:
syx@syx-VB:~$ docker run -it -v ~/datavolume:/data ubuntu /bin/bashroot@167d42cfebb8:/# ls -tdev sys proc data etc var sbin usr tmp bin root lib64 media mnt opt run srv boot home lib
使用-v选项创建数据卷,数据卷的位置~/datavolume:/data,如果此目录不存在,会直接创建一个.
root@167d42cfebb8:/# touch /data/c1root@167d42cfebb8:/# echo "hello world" > /data/c1root@167d42cfebb8:/# exit
syx@syx-VB:~$ ls -l总用量 52drwxr-xr-x 2 root root 4096 5月 12 13:58 datavolumedrwxrwxr-x 5 syx syx 4096 5月 12 11:13 dockerfile-rw-r--r-- 1 syx syx 8980 5月 3 18:48 examples.desktopdrwxr-xr-x 2 syx syx 4096 5月 3 19:17 公共的drwxr-xr-x 2 syx syx 4096 5月 3 19:17 模板drwxr-xr-x 2 syx syx 4096 5月 3 19:17 视频drwxr-xr-x 2 syx syx 4096 5月 3 19:17 图片drwxr-xr-x 2 syx syx 4096 5月 3 19:17 文档drwxr-xr-x 2 syx syx 4096 5月 3 19:17 下载drwxr-xr-x 2 syx syx 4096 5月 3 19:17 音乐drwxr-xr-x 2 syx syx 4096 5月 3 19:17 桌面syx@syx-VB:~$ ls -l datavolume总用量 4-rw-r--r-- 1 root root 12 5月 12 13:58 c1syx@syx-VB:~$ vim datavolume/c1
数据卷的使用
syx@syx-VB:~$ docker run -it -v ~/datavolume:/data:ro --name dvt1 ubuntu /bin/bashroot@362cb8713da7:/# ls -ltotal 68drwxr-xr-x 2 root root 4096 May 3 15:53 bindrwxr-xr-x 2 root root 4096 Apr 12 20:14 bootdrwxr-xr-x 2 root root 4096 May 12 05:58 datadrwxr-xr-x 5 root root 380 May 12 06:04 devdrwxr-xr-x 44 root root 4096 May 12 06:04 etcdrwxr-xr-x 2 root root 4096 Apr 12 20:14 homedrwxr-xr-x 8 root root 4096 Sep 13 2015 libdrwxr-xr-x 2 root root 4096 May 3 15:52 lib64drwxr-xr-x 2 root root 4096 May 3 15:52 mediadrwxr-xr-x 2 root root 4096 May 3 15:52 mntdrwxr-xr-x 2 root root 4096 May 3 15:52 optdr-xr-xr-x 153 root root 0 May 12 06:04 procdrwx------ 2 root root 4096 May 3 15:52 rootdrwxr-xr-x 4 root root 4096 May 3 15:52 rundrwxr-xr-x 2 root root 4096 May 3 23:12 sbindrwxr-xr-x 2 root root 4096 May 3 15:52 srvdr-xr-xr-x 13 root root 0 May 12 06:04 sysdrwxrwxrwt 2 root root 4096 May 3 15:53 tmpdrwxr-xr-x 11 root root 4096 May 3 23:12 usrdrwxr-xr-x 13 root root 4096 May 3 23:12 varroot@362cb8713da7:/# touch data/c2touch: cannot touch 'data/c2': Read-only file system
因为在创建数据卷的时候使用ro选项(readonly),所以不能在数据卷中创建文件.
docker inspect dvt1
"Mounts": [
{
"Source": "/home/syx/datavolume",
"Destination": "/data",
"Mode": "ro",
"RW": false
}
],
通过上面得到的信息可以看出dvt1容器中数据卷的信息.
当然也可以通过Dockerfile文件构建包含数据卷的镜像.演示:
Dockerfile文件内容如下:
FROM ubuntuVOLUME ["/datavolume1","datavolume2"]CMD /bin/bash
syx@syx-VB:~/dockerfile/df_test4$ docker build -t syx/dvt . syx@syx-VB:~/dockerfile/df_test4$ docker run --name dvt3 -it syx/dvt root@dfbc828f264f:/# ls -ltotal 72drwxr-xr-x 2 root root 4096 May 3 15:53 bindrwxr-xr-x 2 root root 4096 Apr 12 20:14 bootdrwxr-xr-x 2 root root 4096 May 12 06:16 datavolume1drwxr-xr-x 2 root root 4096 May 12 06:16 datavolume2drwxr-xr-x 5 root root 380 May 12 06:16 devdrwxr-xr-x 44 root root 4096 May 12 06:16 etcdrwxr-xr-x 2 root root 4096 Apr 12 20:14 homedrwxr-xr-x 8 root root 4096 Sep 13 2015 libdrwxr-xr-x 2 root root 4096 May 3 15:52 lib64drwxr-xr-x 2 root root 4096 May 3 15:52 mediadrwxr-xr-x 2 root root 4096 May 3 15:52 mntdrwxr-xr-x 2 root root 4096 May 3 15:52 optdr-xr-xr-x 150 root root 0 May 12 06:16 procdrwx------ 2 root root 4096 May 3 15:52 rootdrwxr-xr-x 4 root root 4096 May 3 15:52 rundrwxr-xr-x 2 root root 4096 May 3 23:12 sbindrwxr-xr-x 2 root root 4096 May 3 15:52 srvdr-xr-xr-x 13 root root 0 May 12 06:04 sysdrwxrwxrwt 2 root root 4096 May 3 15:53 tmpdrwxr-xr-x 11 root root 4096 May 3 23:12 usrdrwxr-xr-x 13 root root 4096 May 3 23:12 var
能看到咱们创建的两个数据卷了.
syx@syx-VB:~/dockerfile/df_test4$ docker inspect dvt3
查看一下数据卷的信息.
Docker的数据卷容器
什么是数据卷容器?
命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫做数据卷容器.
是不是很绕口?
演示
前面创建了一个包含数据卷的镜像:syx/dvt
使用这个镜像创建几个容器:
syx@syx-VB:~$ docker run -it --name dvt4 syx/dvtroot@f5e9f5629ae7:/# lsbin boot datavolume1 datavolume2 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
看到了咱们在前面的床架的两个数据卷
root@f5e9f5629ae7:/# touch /datavolume1/dvt4_1root@f5e9f5629ae7:/# ls /datavolume1dvt4_1
退出容器
root@f5e9f5629ae7:/# exit
再创建一个容器:
syx@syx-VB:~$ docker run -it --name dvt6 --volumes-from dvt4 ubuntu /bin/bash
依然看到了咱们前面创建的两个数据卷:
root@94967ac367d4:/# lsbin boot datavolume1 datavolume2 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
可以看到咱们前面在dvt4容器中创建的dvt4-1的文件
root@94967ac367d4:/# ls /datavolume1dvt4_1
在dvt6容器中创建一个dvt5_1
root@94967ac367d4:/# touch /datavolume1/dvt5_1
可以看到在dvt4和dvt6中分别创建的文件:
root@94967ac367d4:/# ls /datavolume1 dvt4_1 dvt5_1
退出dct6容器
root@94967ac367d4:/# exitexit
创建一个dvt7容器
syx@syx-VB:~$ docker run -it --name dvt7 --volumes-from dvt4 ubuntu /bin/bash
可以看到两个数据卷
root@a682dbe57bec:/# lsbin boot datavolume1 datavolume2 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
可以看到在数据卷中我们在前两个是容器中创建的两个文件
root@a682dbe57bec:/# ls /datavolume1dvt4_1 dvt5_1
使用数据卷容器可以很容易的在不同的容器中共享数据,同时我们并不需要使用者确切的连接到已知的docker已知的宿主机目录.我们可以不暴露我们宿主机的实际目录.
如果我们删除dvt4
syx@syx-VB:~$ docker rm dvt4syx@syx-VB:~$ docker ps -a
可以看到dvt4容器没有了.
进入dvt6容器
syx@syx-VB:~$ docker start -i dvt6root@94967ac367d4:/# ls
bin boot datavolume1 datavolume2 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
还能看到原来的东西.
root@94967ac367d4:/# ls /datavolume1dvt4_1 dvt5_1 root@94967ac367d4:/# touch /datavolume1/dvt6_1root@94967ac367d4:/# ls /datavolume1dvt4_1 dvt5_1 dvt6_1root@94967ac367d4:/# exitexitsyx@syx-VB:~$ docker start -i dvt7root@a682dbe57bec:/# ls /datavolume1dvt4_1 dvt5_1 dvt6_1
就算删除了dvt4这个数据卷容器,依然没有任何问题,数据仍然可以共享.
syx@syx-VB:~$ docker run --name dvt8 syx/dvtsyx@syx-VB:~$ docker run --name dvt9 -it --volumes-from dvt8 ubuntu /bin/bashroot@d2c330659d64:/# lsbin boot datavolume1 datavolume2 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr varroot@d2c330659d64:/# touch /datavolume1/dvt9_1root@d2c330659d64:/# ls /datavolume1dvt9_1root@d2c330659d64:/# exitexitsyx@syx-VB:~$ docker rm -v dvt8dvt8syx@syx-VB:~$ docker start -i dvt9root@d2c330659d64:/# lsbin boot datavolume1 datavolume2 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr varroot@d2c330659d64:/# touch datavolume1/dvt9_2root@d2c330659d64:/# ls /datavolume1dvt9_1 dvt9_2
上面这些东西楼主就不一一说明了,注释单纯的说一下结论:
在docker中,如果一个数据卷还在本容器使用,那么它就会一直存在,使用数据卷容器来挂载数据,实际上这个容器所起到的作用仅仅是将数据卷挂载的配置传递到挂在了数据卷容器的新容器中.
数据卷的备份和还原
讲一个包含数据卷的容器中的数据通过一个容器执行一个压缩命令从而将数据备份出来:
需要一个有数据卷的容器,前面我们已经创建了dvt6
syx@syx-VB:~$ docker start -i dvt6root@94967ac367d4:/# ls /datavolume1dvt4_1 dvt5_1 dvt6_1root@94967ac367d4:/# exitexit
我们将dvt6的数据备份一下:
syx@syx-VB:~$ docker run --volumes-from dvt6 -v ~/backup:/backup --name dvt10 ubuntu tar cvf /backup/dvt6.tar /datavolume1tar: Removing leading `/' from member names/datavolume1//datavolume1/dvt6_1/datavolume1/dvt4_1/datavolume1/dvt5_1
生成了dvt6.tar的文件,该文件就是dvt6容器卷的备份文件.
syx@syx-VB:~$ ls backup/dvt6.tar
解释一下上面的命令,使用--volumes-from标记来创建一个加载dvt6容器卷的容器,并从本地主机的~/backup挂载到当前容器的/backup目录.
数据还原
docker run --volumes-from [容器名字] -v $(pwd):/backup ubuntu tar xvf /backup/backup.atr [容器数据卷]
$(pwd)是docker直接的指定当前目录的方法.
还是需要创建一个带有空数据卷的容器dvt11
syx@syx-VB:~$ docker run -it --name dvt11 syx/dvt root@77632b276601:/# ls /datavolume1
什么都没有
syx@syx-VB:~$ docker run --volumes-from dvt11 -v ~/backup:/backup ubuntu tar xvf /backup/dvt6.tardatavolume1/datavolume1/dvt6_1datavolume1/dvt4_1datavolume1/dvt5_1 syx@syx-VB:~$ docker start -i dvt11root@77632b276601:/# ls /datavolume1dvt4_1 dvt5_1 dvt6_1
- Docker容器的数据管理
- Docker容器的数据管理
- 76.[Docker]容器的数据管理
- Docker容器中的数据管理
- Docker容器数据管理
- Docker容器数据管理1
- Docker容器数据管理2
- Docker容器数据管理3
- Docker容器数据管理4
- Docker容器数据管理5
- Docker容器数据管理6
- 【Docker容器的数据管理】-【Docker数据卷容器】- 挂在数据卷容器的方法
- 【Docker容器的数据管理】- 数据卷的使用
- Docker的数据管理
- docker的数据管理
- 【Docker容器的数据管理】-【Docker数据卷的备份和还原】- 数据卷备份
- 【Docker容器的数据管理】- 数据卷的使用-为容器添加数据卷
- Docker--容器中数据管理--RHEL7.2
- 【转帖】Facebook 的自动化测试
- ParseCommandLine解析路径中包含空格时中断,开机启动项中路径包含空格中断
- Hotfix热修复混淆
- 《TCP/IP详解》学习笔记-第11章 UDP
- 软件工程(八)
- Docker容器的数据管理
- 五指cms标签说明汇总
- springMVC采用POST方法接收json合适的参数
- linux常用命令
- 原生JS带动画手风琴下拉
- 链表&状态机与多线程
- POJ 1077 Eight
- [转]动态规划:从新手到专家
- 【Android】 Android之API类库整理