Docker数据管理

Docker 管理数据的方式有两种:
数据卷
数据卷容器

1、数据卷

数据卷是一个或多个容器专门指定绕过 Union File System 的目录,为持续性或共享数据提供一些有用的功能:
数据卷可以在容器间共享和重用
数据卷数据改变是直接修改的
数据卷数据改变不会被包括在容器中
数据卷是持续性的,直到没有容器使用它们

数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器可以随意删除、重新运行,数据却不会丢失。
添加一个数据卷
你可以使用 -v 选项添加一个数据卷,或者可以使用多次 -v 选项为一个 docker 容器运行挂载多个数据卷。
-v 选项除了可以创建卷,也可以挂载当前主机的一个目录到容器中。

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 #多个

如果挂载的目录不存在,就会创建。
默认挂载卷是可读写的,可以在挂载时指定只读:

docker run -d --name test -v /app/docker/webapps:/app/tomcat/webapps:ro -p 8090:8080 tomcat:test

创建的数据卷可以通过 docker inspect 获取宿主机对应路径

docker inspect tomcat-8090 |sed -n '/"Volumes": {/{:a;n;/}/!p;/}/!ba}'

或者

docker inspect --format="{{.Volumes}}" tomcat-8090

2、数据卷容器
数据卷容器,其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。
如果你有一些持久性的数据并且想在容器间共享,或者想用在非持久性的容器上,最好的方法是创建一个数据卷容器,然后从此容器上挂载数据。
启动一个容器:

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 容器中的数据卷。

docker run -d --name tomcat-8080 --volumes-from tomcat-8090 -p 8080:8080 tomcat:test

注意:使用 --volumes-from 参数所挂载数据卷的容器自己并不需要保持在运行状态。

验证:
容器tomcat-8090:

容器tomcat-8080:

如果删除了挂载的容器(包括 tomcat-8090、tomcat-8080),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用 docker rm -v 命令来指定同时删除关联的容器。

3、备份、恢复或迁移数据卷

备份:

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

删除 Volumes
Volume 只有在下列情况下才能被删除:
docker rm -v 删除容器时添加了 -v 选项
docker run --rm 运行容器时添加了 --rm 选项

 

posted on 2017-07-26 17:13  K‘e0llm  阅读(215)  评论(0编辑  收藏  举报

导航