Docker数据管理

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 选项

相关文章
相关标签/搜索