Docker 数据管理
在生产环境中使用 Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作。
容器中的管理数据主要有两种方式:
数据卷(Data Volumes):容器内数据直接映射到本地主机环境;
数据卷容器(Data Volume Containers):使用特定容器维护数据卷。
将首先介绍如何在容器内创建数据卷,并且把本地的目录或文件挂载到容器内的数据卷中。接下来,介绍如何使用数据卷容器在容器和主机、容器和容器之间共享数据,并实现数据的备份和恢复。
数据卷
数据卷(Data Volumes)是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于 Linux 中的 mount
行为。
数据卷可以提供很多有用的特性:
- 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效与方便;
- 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作;
- 对数据卷的更新不会影响镜像,解耦开应用和数据 ;
- 卷会一直存在,直到没有容器使用,可以安全地卸载它。
1、创建数据卷
Docker 提供了 volume
子命令来管理数据卷,如下命令可以快速在本地创建一个数据卷:
$ docker volume create -d local test
test
此时,docker volume ls
命令可以查看已有的数据卷,docker inspect test
可以查看数据卷 test 的具体信息:
$ docker volume ls
DRIVER VOLUME NAME
local test
$ docker inspect test
[
{
"CreatedAt": "2021-09-22T15:06:05+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/test/_data",
"Name": "test",
"Options": {},
"Scope": "local"
}
]
除了 create
子命令外,docker volume
还支持 inspect
(查看详细信息)、ls
(列出已有数据卷)、prune
(清理无用数据卷)、rm
(删除数据卷)等,大家可以自行实践。
2、绑定数据卷
除了使用 volume
子命令来管理数据卷外,还可以在创建容器时将主机本地的任意路径挂载到容器内作为数据卷,这种形式创建的数据卷称为绑定数据卷。
在用 docker [container] run
命令的时候,可以使用 -mount 选项来使用数据卷。
-mount 选项支持三种类型的数据卷,包括:
- volume:普通数据卷,映射到主机
/var/lib/docker/volumes
路径下; - bind:绑定数据卷,映射到主机指定路径下;
- tmpfs :临时数据卷,只存在于内存中。
下面使用 training/webapp 镜像创建一个 Web 容器,并创建一个数据卷挂载到容器的 /opt/webapp
目录: