Docker数据管理中的数据卷
作者 | 川石信息
来源 | 今日头条
在生产环境中使用Docker时,经常需要对数据进行持久化,这就有点像Redis里面的持久性一样的,或者需要在多个容器之间在进行数据共享,这就是Docker中我们说的数据管理操作。
容器中管理数据主要有两种方式:
数据卷(Data Volumes):容器内数据直接映射到本地主机环境;
数据卷容器(Data Volume Containers):使用特定容器维护数据卷;
【数据卷】
数据卷(Data Volumes)是一个可供容器使用的特殊目录,它可以将主机操作系统目录直接映射进容器,类似于Linux中的mount行为。
数据卷可以提供很多有用的特性:
- 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效与方便;
- 对数据卷内数据的修改会立即生效,无论是容器内操作还是本地操作;
- 对数据卷的更新不会影响镜像,解藕开应用和数据;
- 卷会一直存在,直到没有容器使用,可以安全地卸载它。
目前Docker提供了三种不同的方式将数据从宿主机挂载到容器中。
1. volumes
Docker管理宿主机文件系统的一部分,默认位于/var/lib/docker/volumes目录中,这是目前使用的最多的方式。
[root@localhost volumes]# ll
总用量 0
drwxr-xr-x. 3 root root 19 8月 29 15:13 037819e6f7ab2b817eddb0053b8b57084fe82ecbc7615caf6ac04cb64765533b
drwxr-xr-x. 3 root root 19 8月 31 16:48 11ff68336fbf30bc7a19476abdffc888c8d7a49cc5a532e277d0a3cac69fa2f6
drwxr-xr-x. 3 root root 19 8月 31 17:44 34be3ff7ac7672d347e96573b050a46d5dab7bf632d7819b098b0cf5a5eabbc5
drwxr-xr-x. 3 root root 19 9月 16 22:56 37f2bdea4eb0de39dc2f73799a0f3acb90ce2365ec5dc7e76a7fd5a45b7069ca
drwxr-xr-x. 3 root root 19 9月 2 15:27 38f8b80456a5fab858343d7293596fada51fa24553840a10a37c6afa5b8e5d77
drwxr-xr-x. 3 root root 19 9月 16 23:30 3ea7a5025a95253e9425ed2d396e73220d947cef489691b05102043395eb56b3
drwxr-xr-x. 3 root root 19 8月 31 10:55 43a32bd680508538987fce798d94b155c82e4cd5b5cf896d74aecfb1bfa0b54a
drwxr-xr-x. 3 root root 19 8月 29 16:31 513ceee578c6ce7ca978998d42b2d7486468f86f865cb4677fc9d299c4cdfe79
drwxr-xr-x. 3 root root 19 8月 29 16:32 9abf06d6768f8c64a61285d672a4351b8d8704baa10e4b97a19b4f737770e2a0
drwxr-xr-x. 3 root root 19 9月 16 23:29 c2a2e7eb9131f0a98741ce058aaa03bde5b1a718b1282cc3b924170db234004b
drwxr-xr-x. 3 root root 19 9月 16 23:07 d8dd50b9cd7bd78810fa1ca51d29b06867492a0a9c6e119a8c444dfce874279b
drwxr-xr-x. 3 root root 19 9月 2 15:25 db3b43b75d088d4573879f5f383660bfa26489d4c54ac83d7b78541884181a9f
drwxr-xr-x. 3 root root 19 8月 30 14:58 e985747a054dc2f884dfab78419b9d5b0f94d2c8367cc7fe8d7e16017f935953
drwxr-xr-x. 3 root root 19 8月 29 23:07 efdb43b34e824cf6bf660e0ed20b3f0b7b5a71029f3cc0e8ce85d80b5a213324
目前所有容器的数据都保存在这个目录下,由于没有创建指定卷,所以Docker帮默认创建了许多匿名卷。
2. bind mounts
表示可以存储在宿主机系统的任意位置,这种方法比较常用。但是bind mount在不同的宿主机系统时不可移植。
3.tmpfs
表示挂载存储在宿主机系统内存中,而不会写入宿主机的文件系统,几乎不用。
a.创建数据卷
Docker提供了volume子命令来管理数据卷,volume子命令的语法格式如下:
docker volume create [OPTIONS] [VOLUME]
//创建一个自定义容器卷
root@ubuntu:/var/lib/docker/volumes# docker volume create my-vol
//查看所有容器卷
root@ubuntu:/var/lib/docker/volumes# docker volume ls
DRIVER VOLUME NAME
local badc300c2e02888929999ee56f2653983adc52a06b62e2b86f3a2ce6228b4ae4
local my-vol
//查看指定容器卷详细信息
root@ubuntu:/var/lib/docker/volumes# docker volume inspect my-vol
[
{
"CreatedAt": "2021-09-26T08:17:59-07:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
]
//删除数据卷
docker volume rm my-vol
b.绑定数据卷
定义好数据卷后,即可以创建一个使用这个数据卷的容器,下面 nginx为例,将数据卷绑定到容器中。将本地的my-vol数据卷挂载到/usr/share/nginx/html目录下。
root@ubuntu:/var/lib/docker/volumes# docker run -it --name=test-nginx -p 80:80 -v local-test-vol:/usr/local/nginx/html nginx
绑定完成后可以通过inspect命令来查看是否绑定成功。
接下来在本地目录
/var/lib/docker/volumes/local-test-vol数据卷就可以与容器中的/usr/local/nginx/html目录进行同步数据,进而达到持久化的效果。即不管是在本地数据卷中还是容器中的/usr/local/nginx/html目录中进行修改文件,两个目录的信息都可以互通。
即使如果容器停止了,我们在本地更新文件,再将容器启动也可以实现数据同步。