容器中管理数据主要有两种方式:数据卷 、数据卷容器
一、数据卷
1、在容器内创建一个数据卷
使用-v标记可以在容器内创建一个数据卷,多次使用-v标记可以创建多个数据卷。如下,创建一个数据卷挂载到/webapp目录。
docker run -d -P --name web -v /webapp training/webapp python app.py
2、挂载一个主机目录作为数据卷
docker挂载数据卷的默认权限是读写(rw),用户可以通过,ro指定为只读。
docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py
3、挂载一个本地主机文件作为数据卷
docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash
二、数据卷容器
如下,首先创建一个数据卷容器dbdata,然后创建db1、db2容器,通过--volumes-from挂载dbdata容器中的数据卷,最后从已挂载数据卷的容器db1来挂载数据卷,创建db3容器。
[root@CentOS702 ~]# docker run -it -v /dbdata --name dbdata ubuntu root@cf751cc3a084:/# ls bin boot dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@cf751cc3a084:/# cd /dbdata root@cf751cc3a084:/dbdata# touch test root@cf751cc3a084:/dbdata# exit exit [root@CentOS702 ~]# docker run -it --volumes-from dbdata --name db1 ubuntu root@08bd914bf754:/# ls /dbdata/ test root@08bd914bf754:/# exit exit [root@CentOS702 ~]# docker run -it --volumes-from dbdata --name db2 ubuntu root@bed7cb507b6b:/# ls /dbdata test root@bed7cb507b6b:/# exit exit [root@CentOS702 ~]# docker run -d --name db3 --volumes-from db1 training/postgres a328fd987dc0104e433809351e5f702506725cca21c2ab58994059136f9e515d [root@CentOS702 ~]# docker exec -ti a328fd /bin/bash root@a328fd987dc0:/# ls /dbdata/ test root@a328fd987dc0:/# exit exit
注意:
1、使用--volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态
2、如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式的使用docker rm -v命令来指定同时删除关联的容器
三、利用数据卷容器迁移数据
1、备份
[root@CentOS702 ~]# docker run -ti -v /dbdata --name dbdata ubuntu root@270cff6eaed1:/# touch /dbdata/test root@270cff6eaed1:/# exit exit [root@CentOS702 ~]# cd /data/ [root@CentOS702 data]# docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata tar: Removing leading `/' from member names /dbdata/ /dbdata/test [root@CentOS702 data]# tar tf backup.tar dbdata/ dbdata/test
2、恢复
[root@CentOS702 data]# docker run -v /dbdata --name dbdata2 ubuntu /bin/bash [root@CentOS702 data]# docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar dbdata/ dbdata/test