docker 数据管理
Posted carriezhangyan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker 数据管理相关的知识,希望对你有一定的参考价值。
一、数据卷
Docker volum 通常翻译为数据卷,用于保存持久化数据。
当我们将数据库例如mysql运行在Docker容器中时,一般将数据通过Docker Volume保存在主机上,这样即使删除MySQL容器,数据依然保存在主机上,有效保证了数据的安全性。
将数据从宿主机挂载到容器中的三种方式:
使用 docker [ container ] run 命令的时候,可以使用 -mount 选项来使用数据卷.
-mount 选项支持三种类型的数据卷,包括:
- volume:普通数据卷,映射到主机/var/lib/docker/volumes路径下;保存数据的最佳方式
- bind:绑定数据卷,映射到 主机指定路径下;
- tmpfs:临时数据卷,只存在于内存中,如果不希望将数据持久存储在任何位置,可以使用tmpfs,同时避免写入容器可写层提高性能。
# docker volume --help Usage: docker volume COMMAND Manage volumes Commands: create 创建一个数据卷 inspect 显示一个或者多个数据卷的详细信息 ls 列出已有数据卷 prune 清理无用数据卷 rm 删除一个或者多个数据卷 Run ‘docker volume COMMAND --help‘ for more information on a command.
创建、查看数据卷:
# docker volume create nginx-vol // 容器创建数据卷 # docker volume ls // 容器查看数据卷 # docker volume inspect nginx-vol // 容器查看数据卷详细信息
绑定数据卷:
# docker run -d --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx 上述命令等同于使用旧的-v标记可以在容器内创建一个数据卷: # docker run -d --name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx 上述命令的意思是:创建nginx容器,命名为nginx-test,将容器nginx-test挂载在目录/usr/share/nginx/html上
清理数据卷:
# docker stop nginx-test // 停止运行容器 # docker rm nginx-test // 删除容器 # docker volume rm nginx-vol // 删除数据卷
注意:
- 1.如果没有指定卷,自动创建。
- 2.建议使用–mount,更通用。
数据持久化测试
用卷创建一个容器:
# docker run -d -it –name=nginx-test –mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx # docker run -d -it –name=nginx-test -v /app/wwwroot:/usr/share/nginx/html nginx
验证绑定:
# docker inspect nginx-test
二、数据卷容器
数据卷容器也是一个容器,目的是专门提供数据卷给其他容器挂载。
创建数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata:
# docker run -it -v /dbdata --name dbdata ubuntu
使用 --volumes-from 来挂载dbdata容器中的数据卷,例如创建db1和db2两个容器,并从dbdata容器挂载数据卷:
# docker run -it --volume-from dbdata --name db1 ubuntu
# docker run -it --volume-from dbdata --name db2 ubuntu
容器db1和db2都挂载同一数据卷到相同的dbdata目录下,三个容器任何一方在该目录下的写入,其他容器都可以看到。
三、利用数据卷容器来迁移数据
可以利用数据卷容器对其中的数据卷进行备份、回复,以实现数据的迁移。
1、备份
利用下面的命令来备份dbdata数据卷容器内的数据卷:
# docker run --volume-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar dbdata
代码分析:
利用ubuntu镜像创建worker容器;
--volume-from dbdata 参数让worker容器挂载dbdata容器的数据卷(即dbdata数据卷);
-v $(pwd):/backup 参数挂载本地的当前目录到worker容器的/dbdata的目录下 ;
worker容器启动后,使用 tar cvf /backup/backup.tar dbdata命令将/dbdata下内容备份为容器内的/backup/backup.tar,即宿主主机当前目录下的backup.tar。
2、恢复
恢复数据到一个容器:
首先创建一个带有数据卷的容器dbdata2:
# docker run -v dbdata --name dbdata2 ubuntu /bin/bash
然后创建另一个新的容器,挂载dbdata2的容器,并使用untar解压备份文件到所挂载的容器卷中:
# docker run --volume-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
以上是关于docker 数据管理的主要内容,如果未能解决你的问题,请参考以下文章