docker之volume数据卷!

这是我参与 8 月更文挑战的第 23 天,活动详情查看: 8月更文挑战

简介

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷

目前Docker提供了三种不同的方式将数据从宿主机挂载到容器中:

1.volume:Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes 目录中

目前所有容器的数据都保存在了这个目录下边,由于没有在创建时指定卷,所以Docker帮我们默认创建许多匿名卷(就上面这一堆很长ID的名字)。

image-20210816103417790

2.bind mounts:意为着可以存储在宿主机系统的任意位置;(比较常用的方式

3.tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统;(一般都不会用的方式

基本使用

管理数据卷

docker volume create test #创建一个自定义容器卷
docker volume ls #查看所有容器卷
docker volume inspect test #查看指定容器卷详情信息
docker volume rm test #删除容器数据卷
复制代码

volume的使用

新建一个容器,-p指定暴露的端口,-v指定数据卷

docker run -d -it --name test-nginx -p 8080:80 -v test-nginx:/usr/share/nginx/html nginx
复制代码

通过docker volume ls可以看到我们挂载的数据卷

image-20210816104503314

默认的数据卷是挂载在/var/lib/docker/volumes目录下

image-20210816104624500

进入数据卷目录下,可以发现这个挂载的目录和容器内的目录内容是同步的

image-20210816104716731

image-20210816111257668

接着我们测试一下

image-20210816105151462

在数据卷里边的东西是可以持久化的。如果下次还需要创建一个nginx容器,那么还是复用当前数据卷里面的文件。

这里我们再新建一个容器测试一下,挂载数据卷的名称和上面一致

docker run -d -it --name test-nginx-2 -p 9090:80 -v test-nginx:/usr/share/nginx/html nginx
复制代码

访问暴露的端口,可以看到和我们上面创建的容器的内容是一样的

image-20210816105615277

Bind Mounts的使用

新建一个容器,暴露10000端口,将/test-nginx挂载为容器内/usr/share/nginx/html

docker run -d -it --name test-nginx-3 -p 10000:80 -v /test-nginx:/usr/share/nginx/html nginx
复制代码

进行测试

image-20210816110604170

进入容器内,可以看到容器内的内容和宿主机目录的内容一致

image-20210816110713606

同volumes一样,当我们清理掉容器之后,挂载目录里面的文件仍然还在,不会随着容器的结束而消失,从而实现数据持久化。

删除容器,发现挂载目录的文件依旧存在

image-20210816112817215

推荐阅读

Linux Shell编程基础!

Linux sudo和sudoers详解!

Linux部署samba服务器!

Linux Zabbix 5.0安装详解!

docker之docker-compose的使用!

docker之Dockerfile文件详解!