Volumes 数据卷管理

4. Volumes 数据卷管理

4.1 Volumes 数据卷的优势


Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用 mount 挂载一个文件系统。操作Docker数据卷,需要理解以下几点:

1)一个数据卷是一个特别指定的目录,该目录利用容器的UFS文件系统可以为容器提供一些稳定的特性或者数据共享。数据卷可以在多个容器之间共享。
2)创建数据卷,只要在docker run命令后面跟上-v参数即可创建一个数据卷,当然也可以跟多个-v参数来创建多个数据卷,当创建好带有数据卷的容器后,就可以在其他容器中通过–volumes-froms参数来挂载该数据卷了,而不管该容器是否运行。也可以在Dockerfile中通过VOLUME指令来增加一个或者多个数据卷。

3)如果有一些数据想在多个容器间共享,或者想在一些临时性的容器中使用该数据,那么最好的方案就是你创建一个数据卷容器,然后从该临时性的容器中挂载该数据卷容器的数据。这样,即使删除了刚开始的第一个数据卷容器或者中间层的数据卷容器,只要有其他容器使用数据卷,数据卷都不会被删除的。

4)不能使用docker export、save、cp等命令来备份数据卷的内容,因为数据卷是存在于镜像之外的。备份方法: 创建一个新容器,挂载数据卷容器,同时挂载一个本地目录,然后把远程数据卷容器的数据卷通过备份命令备份到映射的本地目录里面。如下:

docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data

5)可以把一个本地主机的目录当做数据卷挂载在容器上,同样是在docker run后面跟-v参数,不过-v后面跟的不再是单独的目录了,它是[host-dir]:[container-dir]:[rw|ro]这样格式的,其中host-dir是一个绝对路径的地址,如果host-dir不存在,则docker会创建一个新的数据卷,如果host-dir存在,但是指向的是一个不存在的目录,则docker也会创建该目录,然后使用该目录做数据源。

Docker Volume数据卷可以实现:
-> 绕过“拷贝写”系统,以达到本地磁盘IO的性能,(比如运行一个容器,在容器中对数据卷修改内容,会直接改变宿主机上的数据卷中的内容,所以是本地磁盘IO的性能,而不是先在容器中写一份,最后还要将容器中的修改的内容拷贝出来进行同步。)
-> 绕过“拷贝写”系统,有些文件不需要在docker commit打包进镜像文件。
-> 数据卷可以在容器间共享和重用数据
-> 数据卷可以在宿主和容器间共享数据
-> 数据卷数据改变是直接修改的
-> 数据卷是持续性的,直到没有容器使用它们。即便是初始的数据卷容器或中间层的数据卷容器删除了,只要还有其他的容器使用数据卷,那么里面的数据都不会丢失。

Docker数据持久化:
容器在运行期间产生的数据是不会写在镜像里面的,重新用此镜像启动新的容器就会初始化镜像,会加一个全新的读写入层来保存数据。如果想做到数据持久化,Docker提供数据卷(Data volume)或者数据容器卷来解决问题,另外还可以通过commit提交一个新的镜像来保存产生的数据。

4.2 Volumes 数据卷使用


4.2.1.创建并管理数据卷

1. 创建数据卷

在 Docker 主机终端,通过docker volume create 指令创建一个名为my-vol的数据卷,具体操作指令如下。

sudo docker volume create my-vol
2. 查看数据卷

使用docker volume ls指令查看本地数据卷列表,效果如下图所示。

sudo docker volume ls

在这里插入图片描述

3. 核查数据卷

使用docker volume inspect指令查看指定数据卷详情,具体操作指令如下。

sudo docker volume inspect my-vol

在这里插入图片描述

4. 删除数据卷

当不需要使用数据卷后,可以使用docker volume rm 指令删除指定名称的数据卷,具体操作指令如下。

sudo docker volume rm my-vol

在这里插入图片描述

4.2.2.启动容器并加载数据卷

1. 查看本机容器和数据卷

在Docker主机端分别使用docker ps -a 和docker volume ls 指令查看本地docker机器上存在的容器和数据卷,效果如下图所示。
在这里插入图片描述

2. 确认查看本机Docker文件系统中的容器和数据卷

首先在Docker 主机端中将普通用户切换到root用户,然后进入“/var/lib/docker”目录,即docker默认在本机上的文件系统目录,查看信息,效果如下图所示。
在这里插入图片描述

3. 启动容器并挂载数据卷

使用docker run指令创建并启动一个容器,同时挂载一个数据卷,具体操作指令如下。

docker run -d -it --name devtest --mount source=myvol,target=/app busybox:latest

也可以使用-v参数挂载数据卷,具体指令如下。

docker run -d -it --name devtest2 -v myvol:/app busybox:latest

在这里插入图片描述

4. 再次查看本机容器和数据卷列表

在Docker主机端分别使用docker ps -a 和docker volume ls 指令查看本地docker机器上存在的容器和数据卷,效果如下图所示。
在这里插入图片描述

5. 检查容器详情

在Docker 主机端使用docker inspect指令查看容器详情(主要查看数据挂载信息),效果如下图所示。
在这里插入图片描述

6. 再次确认查看本机Docker文件系统中的容器和数据卷

首先在Docker 主机端中将普通用户切换到root用户,然后进入“/var/lib/docker”目录,然后分别进入containers容器文件目录和volumes数据卷文件目录查看内容,效果如下图所示。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_37955704/article/details/90762683
今日推荐