Docker数据管理中的数据卷

amang2000
发布于 2022-4-30 18:03
浏览
0收藏

作者 | 川石信息
来源 | 今日头条

在生产环境中使用Docker时,经常需要对数据进行持久化,这就有点像Redis里面的持久性一样的,或者需要在多个容器之间在进行数据共享,这就是Docker中我们说的数据管理操作。

容器中管理数据主要有两种方式:

数据卷(Data Volumes):容器内数据直接映射到本地主机环境;

数据卷容器(Data Volume Containers):使用特定容器维护数据卷;

【数据卷】

数据卷(Data Volumes)是一个可供容器使用的特殊目录,它可以将主机操作系统目录直接映射进容器,类似于Linux中的mount行为。

数据卷可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效与方便;
  • 对数据卷内数据的修改会立即生效,无论是容器内操作还是本地操作;
  • 对数据卷的更新不会影响镜像,解藕开应用和数据;
  • 卷会一直存在,直到没有容器使用,可以安全地卸载它。

目前Docker提供了三种不同的方式将数据从宿主机挂载到容器中。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命令来查看是否绑定成功。Docker数据管理中的数据卷-鸿蒙开发者社区

接下来在本地目录

/var/lib/docker/volumes/local-test-vol数据卷就可以与容器中的/usr/local/nginx/html目录进行同步数据,进而达到持久化的效果。即不管是在本地数据卷中还是容器中的/usr/local/nginx/html目录中进行修改文件,两个目录的信息都可以互通。

即使如果容器停止了,我们在本地更新文件,再将容器启动也可以实现数据同步。

收藏
回复
举报
回复
    相关推荐