Docker 管理数据的方式有两种:
数据卷
数据卷容器html
一、数据卷web
数据卷是一个或多个容器专门指定绕过 Union File System 的目录,为持续性或共享数据提供一些有用的功能:
数据卷能够在容器间共享和重用
数据卷数据改变是直接修改的
数据卷数据改变不会被包括在容器中
数据卷是持续性的,直到没有容器使用它们docker
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。所以,使用数据卷后,容器能够随意删除、从新运行,数据却不会丢失。
添加一个数据卷
你可使用 -v 选项添加一个数据卷,或者可使用屡次 -v 选项为一个 docker 容器运行挂载多个数据卷。
-v 选项除了能够建立卷,也能够挂载当前主机的一个目录到容器中。centos
docker run -d --name test -v /app/docker/webapps:/app/tomcat/webapps -p 8090:8080 tomcat:test #一个 docker run -d --name tomcat-8090 -v /app/docker/webapps:/app/tomcat/webapps -v /app/docker/logs:/app/tomcat/logs -p 8090:8080 tomcat:test #多个
若是挂载的目录不存在,就会建立。
默认挂载卷是可读写的,能够在挂载时指定只读:tomcat
docker run -d --name test -v /app/docker/webapps:/app/tomcat/webapps:ro -p 8090:8080 tomcat:test
建立的数据卷能够经过 docker inspect 获取宿主机对应路径bash
docker inspect tomcat-8090 |sed -n '/"Volumes": {/{:a;n;/}/!p;/}/!ba}'
或者app
docker inspect --format="{{.Volumes}}" tomcat-8090
二、数据卷容器
数据卷容器,其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。
若是你有一些持久性的数据而且想在容器间共享,或者想用在非持久性的容器上,最好的方法是建立一个数据卷容器,而后今后容器上挂载数据。
启动一个容器:webapp
docker run -d --name tomcat-8090 -v /app/docker/webapps:/app/tomcat/webapps -v /app/docker/logs:/app/tomcat/logs -p 8090:8080 tomcat:test [root@localhost docker]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a6906e205ae8 tomcat:test "/bin/sh -c '/etc/in 26 minutes ago Up 26 minutes 0.0.0.0:8090->8080/tcp tomcat-8090
在其余容器中使用 --volumes-from 来挂载 tomcat-8090 容器中的数据卷。tcp
docker run -d --name tomcat-8080 --volumes-from tomcat-8090 -p 8080:8080 tomcat:test
注意:使用 --volumes-from 参数所挂载数据卷的容器本身并不须要保持在运行状态。orm
验证:
容器tomcat-8090:
容器tomcat-8080:
若是删除了挂载的容器(包括 tomcat-8090、tomcat-8080),数据卷并不会被自动删除。若是要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用 docker rm -v 命令来指定同时删除关联的容器。
三、备份、恢复或迁移数据卷
备份:
docker run --rm --volumes-from tomcat-8090 -v /opt/backup:/backup centos tar cvf /backup/tomcat-webapps.tar /app/tomcat/webapps
启动一个新的容器而且从 tomcat-8090 容器中挂载卷,而后挂载/opt/backup 目录到容器中为 /backup,并备份tomcat-8090 卷中的webapps目录的数据为 tomcat-webapps.tar ,备份目录在/opt/backup目录下,--rm 选项表示执行完成以后删除容器 。
echo 'ok' > /app/docker/webapps/ROOT/test/test.html
恢复:
docker run --rm --volumes-from tomcat-8080 -v /opt/backup:/backup centos tar xvf /backup/tomcat-webapps.tar
删除 VolumesVolume 只有在下列状况下才能被删除:docker rm -v 删除容器时添加了 -v 选项docker run --rm 运行容器时添加了 --rm 选项