4.容器中管理数据
2015-08-28 15:18
417 查看
容器中管理数据主要有两种方式
数据卷(data volumes)
数据卷容器(data volume containers)
特征
数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特征
1:数据卷可以在容器之间共享和重用
2:对数据卷修改会立马生产
3:对数据卷更新,不会影响镜像
4:卷会一直存在,直到没有容器使用
数据卷的使用,类似于linux下对目录或文件的mount的操作
1:在容器内创建一个数据卷
-v
docker run -d -p --name web -v /webapp training/webapp python app.py
-P:允许外部访问容器需要暴露的端口。
2:挂载一个主机目录作为数据卷
docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
上面的命令加载主机的/src/webapp目录到容器的/opt/webapp目录
注:本地目录的路径必须是绝对路径,如果目录不存在,docker会自动创建
docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py
ro:只读
3:挂载一个本地主机文件作为数据卷
docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash
上面这条命令可以让容器记录输入的历史命令
注:如果直接挂载一个文件到容器,使用文件编辑工具,可能会造成文件inode的改变,这会导致报错。所以不推荐这种方法
4:数据卷容器
如果用户需要在容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。它就是一个普通的容器,专门用它提供数据卷供其它容器挂载
方法如下
创建一个数据卷容器liufu,并在其中创建一个数据卷挂载到/dbdata
docker run -it -v /dbdata --name liufu ubuntu
root@7ea260619c51:/# ls
bin boot dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@7ea260619c51:/# df -hT
Filesystem Type Size Used Avail Use% Mounted on
rootfs rootfs 20G 2.1G 17G 11% /
none aufs 20G 2.1G 17G 11% /
tmpfs tmpfs 498M 0 498M 0% /dev
shm tmpfs 64M 0 64M 0% /dev/shm
/dev/mapper/linux-root ext4 20G 2.1G 17G 11% /dbdata
tmpfs tmpfs 498M 0 498M 0% /proc/kcore
tmpfs tmpfs 498M 0 498M 0% /proc/latency_stats
tmpfs tmpfs 498M 0 498M 0% /proc/timer_stats
然后,创建另外一个容器的时候使用--volumes-from 来挂载liufu容器的的数据卷
docker run -it --voluems-from liufu --name liufu1 ubuntu
进入这个容器可以看到/dbdata ,并且可以看到这个目录下有前一个容器创建的文件
注:可以多次使用--volumes-from 参数来从多个容器挂载多个数据卷
除了删除了挂载的容器,数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用docker rm -v 命令来指定同时删除关联的容器。
5利用数据卷容器迁移数据
可以利用数据卷容器对其它的数据卷进行备份、恢复、以实现数据的迁移
备份:
使用下面的命令来备份dbdata数据卷容器内的数据卷
docker run --volumes-from liufu -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata
解释:
首先利用ubuntu镜像创建了一个容器worker。
使用--volumes-from dbdata 参数来让worker容器挂载dbdata容器的数据卷
使用-v $(pwd):/backup参数来挂载本地的当前目录到worker容器的/backup目录
worker容器启动后,使用tar cvf /backup/backup.tar /dbdata 命令来将/dbdata下内容备份为容器内的/backup/backup.tar 。
恢复
创建一个带有数据卷的容器dbdata2
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
然后创建另一个新的容器,挂载dbdata2的容器,并使用untar解压备份文件到所在挂载的容器卷中即可
docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
数据卷(data volumes)
数据卷容器(data volume containers)
特征
数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特征
1:数据卷可以在容器之间共享和重用
2:对数据卷修改会立马生产
3:对数据卷更新,不会影响镜像
4:卷会一直存在,直到没有容器使用
数据卷的使用,类似于linux下对目录或文件的mount的操作
1:在容器内创建一个数据卷
-v
docker run -d -p --name web -v /webapp training/webapp python app.py
-P:允许外部访问容器需要暴露的端口。
2:挂载一个主机目录作为数据卷
docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
上面的命令加载主机的/src/webapp目录到容器的/opt/webapp目录
注:本地目录的路径必须是绝对路径,如果目录不存在,docker会自动创建
docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py
ro:只读
3:挂载一个本地主机文件作为数据卷
docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash
上面这条命令可以让容器记录输入的历史命令
注:如果直接挂载一个文件到容器,使用文件编辑工具,可能会造成文件inode的改变,这会导致报错。所以不推荐这种方法
4:数据卷容器
如果用户需要在容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。它就是一个普通的容器,专门用它提供数据卷供其它容器挂载
方法如下
创建一个数据卷容器liufu,并在其中创建一个数据卷挂载到/dbdata
docker run -it -v /dbdata --name liufu ubuntu
root@7ea260619c51:/# ls
bin boot dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@7ea260619c51:/# df -hT
Filesystem Type Size Used Avail Use% Mounted on
rootfs rootfs 20G 2.1G 17G 11% /
none aufs 20G 2.1G 17G 11% /
tmpfs tmpfs 498M 0 498M 0% /dev
shm tmpfs 64M 0 64M 0% /dev/shm
/dev/mapper/linux-root ext4 20G 2.1G 17G 11% /dbdata
tmpfs tmpfs 498M 0 498M 0% /proc/kcore
tmpfs tmpfs 498M 0 498M 0% /proc/latency_stats
tmpfs tmpfs 498M 0 498M 0% /proc/timer_stats
然后,创建另外一个容器的时候使用--volumes-from 来挂载liufu容器的的数据卷
docker run -it --voluems-from liufu --name liufu1 ubuntu
进入这个容器可以看到/dbdata ,并且可以看到这个目录下有前一个容器创建的文件
注:可以多次使用--volumes-from 参数来从多个容器挂载多个数据卷
除了删除了挂载的容器,数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用docker rm -v 命令来指定同时删除关联的容器。
5利用数据卷容器迁移数据
可以利用数据卷容器对其它的数据卷进行备份、恢复、以实现数据的迁移
备份:
使用下面的命令来备份dbdata数据卷容器内的数据卷
docker run --volumes-from liufu -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata
解释:
首先利用ubuntu镜像创建了一个容器worker。
使用--volumes-from dbdata 参数来让worker容器挂载dbdata容器的数据卷
使用-v $(pwd):/backup参数来挂载本地的当前目录到worker容器的/backup目录
worker容器启动后,使用tar cvf /backup/backup.tar /dbdata 命令来将/dbdata下内容备份为容器内的/backup/backup.tar 。
恢复
创建一个带有数据卷的容器dbdata2
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
然后创建另一个新的容器,挂载dbdata2的容器,并使用untar解压备份文件到所在挂载的容器卷中即可
docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
相关文章推荐
- python监控windows的CPU,Memory,Disk
- 常用的OpenCV函数速查
- [刷题]Nth to Last Node in List
- linux shell if 参数
- 利用redis + lua解决抢红包高并发的问题
- hackerrank:Palindrome Index(hash)
- java源码查看工具之Source Insight
- CSS3:固定textarea文本域宽度
- 手机网站和电脑网站设计是需注意的区别
- 3.仓库
- Qt Creator编译器设置:添加C++11支持
- Activiti值活动节点,排他网关(ExclusiveGateWay)and并行网关(parallelGateWay) (八)
- 匈牙利算法
- 最长递增子序列 O nlgn时间复杂度
- Entity Framework Extended Library
- CSS样式表
- GridView使用CommandField删除列实现删除时提示确认框
- Android 安装错误汇总
- roboming前端开发统一规范
- Nginx日志处理