docker数据管理

容器中管理数据主要有两种方式:数据卷 、数据卷容器

一、数据卷

 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

 

posted @ 2017-05-31 16:24  liuyongsheng  阅读(164)  评论(0编辑  收藏  举报