容器数据管理的2个主要方式:
Data volumes(数据卷)
Data volume containers(数据卷容器)
一、数据卷
1、数据卷特性:
数据卷是一个由 UFS 文件系统专门设计的的特殊目录,它可以提供很多有用的特性:
• 数据卷可以在容器之间共享和重用
• 对数据卷的改变是立马生效
• 当你更新数据卷中的数据的时候,不会被包含到 image 中
• 卷会一直存在直到没有容器使用他们
2、数据卷特点:
• 数据卷在容器启动初始化时,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中。
• 数据卷可以在容器直接共享和重用。
• 可以直接对数据卷里的内容进行修改。
• 数据卷的变化不会影响镜像的更新。
• 卷会一直存在,即使挂载数据卷的容器已经删除。
3、添加一个数据卷
在用 docker run 命令的时候,使用 -v 标记来添加一个数据卷。在一次 run 中多次使用可以挂载多个数据卷,下面加载一个卷到 web 容器上。
sudo docker run -it --name web -v /webapp centos:1.0 /bin/bash
webapp 是容器中的目录,目录不存在会从新创建。
4、挂载一个主机目录作为数据卷
使用 -v 标记也可以挂载一个主机的目录到容器中去
sudo docker run -it --name web -v /opt/webapp:/webapp centos:1.0 /bin/bash
/opt/webapp为宿主机目录、webapp 是容器中的目录,目录不存在会从新创建。这个在测试的时候特别好用,比如我们可以加载我们的源码到容器中,来查看他们是否正常工作。目录的路径必须是主机上的绝对路径。
注意 :dockerfile 中不能用,各种操作系统的文件路径格式不一样,所以不一定适合所有的主机。
sudo docker run -it --name web -v /opt/webapp:/webapp:ro centos:1.0 /bin/bash
docker加载的数据卷默认是读写权限,加了 ro 之后,就挂载为只读了。
sudo docker run --rm -it -v ~/.bash_history:/.bash_history centos:1.0 /bin/bash
二、数据卷容器
如果你有一些持续更新的数据需要在容器之间共享,最好创建 Data Volume Container ,然后加载它。注意:数据卷容器会降低I/O性能。
1、创建一个容器数据卷
sudo docker run -itd -v /logdata --name logdata centos:1.0
/logdata是数据卷容器内共享的目录。
2、在其他容器中挂载logdata容器的数据卷
sudo docker run -itd --name web1 --volumes-from logdata centos:1.0
sudo docker run -itd --name web2 --volumes-from logdata centos:1.0
分别进入web1、web2容器中,会有一个/logdata目录,在web1里的/logdata目录创建文件,web2也能看的到。删除web1、web2,时,数据卷并不会被自动删除。如果想删除需在删除最后一个挂载着它的容器时使用docker rm -v 命令来指定删除关联的容器。
三、数据卷容器备份和还原
1、备份
sudo docker run --volumes-from logdata -v /container_backup:/backup centos:1.0 tar cvf /backup/backup.tar /data
说明:先创建一个临时容器,并挂载logdata容器数据卷,再挂载数据卷/container_backup目录到容器/bakcup,在容器中执行备份/data目录到/backup,也就是备份到宿主机/container_backup目录。
2、恢复
先创建一个数据卷容器
sudo docker run -v /data --name logdata2 centos:1.0
注意:这个数据卷目录名要与备份的一样
再将备份文件恢复到这个数据卷容器
sudo docker run --volumes-from logdata2 -v /container_backup:/backup centos:1.0 tar xvf /backup/backup.tar
最后启动一个容器挂载验证/data目录数据恢复成功
sudo docker run -itd --volumes-from logdata2 --name web_recover centos:1.0
四、迁移容器和镜像
1、先创建测试容器
sudo docker exec web touch /opt/test.txt
sudo docker exec web ls /opt
2、执行导出
sudo docker export web > web.tar
3、执行导入
cat web.tar | sudo docker import - web:v2
4、启动容器
sudo docker run -itd --name web_v2 web:v2 /bin/bash
5、进入容器查看
sudo docker exec web_v2 ls /opt
6、save与load命令使用,一般用于迁移镜像到别处
导出:
sudo docker save web > web.tar
导入:
sudo docker load < web.tar
注:不会丢弃历史记录和元数据,并可以回滚版本。启动不用加/bin/bash
参考原始文章:http://lizhenliang.blog.51cto.com/7876557/1730892