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 数据管理的主要内容,如果未能解决你的问题,请参考以下文章

markdown docker-compose片段

sh Docker片段

《Docker 源码分析》全球首发啦!

docker 部署 coredns(内部域名解析)

docker 部署 coredns(内部域名解析)

将 Docker 容器限制为单个 cpu 核心