您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  容器中管理数据