Docker 数据管理
1 本章背景知识
在生产环境中使用 Docker
的过程中,往往需要对数据进行持久化或者在多个容器之间进行数据共享,这涉及到容器的数据管理操作
容器中管理数据的两种方式:
- 数据卷(Data Volumes ): 容器内部数据直接映射到本地主机环境。
- 数据卷容器(Data Volume Contanier ):使用特定的容器维护数据卷。
本章首先介绍在容器内部创建数据卷,并且把本地目录或文件挂载到容器内的数据卷中。接着,会介绍如何使用数据卷容器在容器和主机、容器和容器之间共享数据,并实现数据的备份和恢复。
1.1 什么是Docker 的数据卷?
数据卷是一个可供容器使用的特殊目录,他将宿主机操作系统目录映射进入容器内部,类似Linux的 mount 操作。
数据卷可以提供很多有用的特性,如下所示:
- 数据卷可以在容器之间共享和重用。
- 对于数据内的数据修改会立马生效,无论是容器内操作还是本地操作;
- 对数据卷的更新不会影响镜像,解耦合了应用程序和数据;
- 卷会一直保留,直到没有容器使用,可以安全的卸载它。
2 Docker 数据卷容器
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式使用数据卷容器。数据卷容器也是容器,主要目的是提供数据卷供其他容器挂载。
2.1 创建一个数据卷容器 dbdata
docker run -it -v /dbdata --name dbdata centos:7.2.1511
2.2 创建其他容器
可以使用 --volumnes-from
挂载dbadata 容器中的数据卷。
例如,创建db1和db2 两个容器,并从 dbdata
容器挂载数据卷:
docker run -it --volumes-from dbdata --name db1 centos:7.2.1511
docker run -it --volumes-from dbdata --name db2 centos:7.2.1511
此时,容器db1和db2都挂载同一个数据卷到相同的/dbdata 目录。
2.3 查看数据卷中的数据
- 在dbdata容器中创建一个
kingbase
文件
docker start -i dbdata
cd /dbdata
touch kingbase
ls
- 在db1或db2 容器内查看文件是否存在。
docker start -i db1
cd /dbdata
ls
3 匿名和具名数据卷
Docker 匿名数据卷
Docker 实名数据卷
关于数据卷是否更多信息请参考 Docker 数据卷是否自动删除
4 Docker 保留容器的bash历史
在一个容器中进行实验室,用户退出bash 环境中,将会失去命令的历史记录。
docker run -e HIST_FILE=/root/.bash_history -v=$HOME/.bash_history:/root/.bash_history -ti centos7.2.1511 /bin/bash
将容器内部的root目录下的 bash
历史文件映射到宿主机上。
Note
在 docker run
命令中使用 -rm
命令时,匿名卷将会被一起删除。