什么是数据卷(volume)?

数据卷(volume) 是一个虚拟目录,指向宿主机文件系统中的某个目录。

1、数据卷解决了什么问题?

因容器与数据(容器内文件)耦合所引发的问题:

  1. 容器内数据修改困难:修改时需进入容器内操作,操作复杂不方便。
  2. 数据不可复用:容器内的修改对外不可见,也就是说每新建一个容器均需执行一次相关操作。
  3. 升级维护困难:升级容器时会删除旧容器,而数据存储在容器内,也就是说容器升级时数据会跟随旧容器一同被删除。

2、数据卷如何解决上诉问题的

通过数据卷挂载完成 数据(容器内文件)与容器解耦。

数据卷挂载后的效果:

  1. 对容器的一切操作都会作用在数据卷对应的宿主机目录了。
  2. 反过来讲,对数据卷对应的宿主机目录的一切操作也会作用在容器上。

总结: 挂载后,容器与宿主机目录会互相同步,简化了修改容器的操作难度;且数据与容器解绑,实现了数据的本地存储和复用。

如图所示,当我们操作宿主机的/var/lib/docker/volumes/html目录时,等同于操作容器内的/usr/share/nginx/html目录。

window docker进入数据卷所在位置 docker删除数据卷_docker

3、数据卷操作命令

基本语法如下:

docker volume [COMMAND]

window docker进入数据卷所在位置 docker删除数据卷_html_02

  1. docker volume create:创建数据卷
  2. docker volume ls:查看所有数据卷
  3. docker volume inspect:查看数据卷详细信息,包括关联的宿主机目录位置
  4. docker volume rm:删除指定数据卷
  5. docker volume prune:删除所有未使用的数据卷
3.1、 创建数据卷

格式:docker volume create [数据卷名称]

#创建数据卷 html
docker volume create html
#创建数据卷 data
docker volume create data
#创建数据卷 test
docker volume create test

示例:

window docker进入数据卷所在位置 docker删除数据卷_html_03

3.2、 查看数据卷

查看全部数据卷:

docker volume ls

window docker进入数据卷所在位置 docker删除数据卷_docker_04


根据名称筛选查看某个数据卷:

格式:docker volume ls --filter name=[数据卷名称]

# 查看数据卷html
docker volume ls --filter name=html

window docker进入数据卷所在位置 docker删除数据卷_运维_05

3.3、 查看数据卷详细信息

格式:docker volume inspect [数据卷名称]

#查看数据卷html详细信息
docker volume inspect html

window docker进入数据卷所在位置 docker删除数据卷_运维_06


框中部分为数据卷html关联的宿主机目录(Mountpoint:挂载点):/var/lib/docker/volumes/html/_data。

3.4、 删除指定数据卷

格式:docker volume rm [数据卷名称]

# 删除数据卷test
docker volume rm test

window docker进入数据卷所在位置 docker删除数据卷_数据_07

3.5、 删除所有未使用的数据卷
docker volume prune