
Docker数据管理中的数据卷
作者 | 川石信息
来源 | 今日头条
在生产环境中使用Docker时,经常需要对数据进行持久化,这就有点像Redis里面的持久性一样的,或者需要在多个容器之间在进行数据共享,这就是Docker中我们说的数据管理操作。
容器中管理数据主要有两种方式:
数据卷(Data Volumes):容器内数据直接映射到本地主机环境;
数据卷容器(Data Volume Containers):使用特定容器维护数据卷;
【数据卷】
数据卷(Data Volumes)是一个可供容器使用的特殊目录,它可以将主机操作系统目录直接映射进容器,类似于Linux中的mount行为。
数据卷可以提供很多有用的特性:
- 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效与方便;
- 对数据卷内数据的修改会立即生效,无论是容器内操作还是本地操作;
- 对数据卷的更新不会影响镜像,解藕开应用和数据;
- 卷会一直存在,直到没有容器使用,可以安全地卸载它。
目前Docker提供了三种不同的方式将数据从宿主机挂载到容器中。
1. volumes
Docker管理宿主机文件系统的一部分,默认位于/var/lib/docker/volumes目录中,这是目前使用的最多的方式。
目前所有容器的数据都保存在这个目录下,由于没有创建指定卷,所以Docker帮默认创建了许多匿名卷。
2. bind mounts
表示可以存储在宿主机系统的任意位置,这种方法比较常用。但是bind mount在不同的宿主机系统时不可移植。
3.tmpfs
表示挂载存储在宿主机系统内存中,而不会写入宿主机的文件系统,几乎不用。
a.创建数据卷
Docker提供了volume子命令来管理数据卷,volume子命令的语法格式如下:
b.绑定数据卷
定义好数据卷后,即可以创建一个使用这个数据卷的容器,下面 nginx为例,将数据卷绑定到容器中。将本地的my-vol数据卷挂载到/usr/share/nginx/html目录下。
绑定完成后可以通过inspect命令来查看是否绑定成功。
接下来在本地目录
/var/lib/docker/volumes/local-test-vol数据卷就可以与容器中的/usr/local/nginx/html目录进行同步数据,进而达到持久化的效果。即不管是在本地数据卷中还是容器中的/usr/local/nginx/html目录中进行修改文件,两个目录的信息都可以互通。
即使如果容器停止了,我们在本地更新文件,再将容器启动也可以实现数据同步。
