这是我参与 8 月更文挑战的第 23 天,活动详情查看: 8月更文挑战
简介
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker
不会在容器删除时删除其挂载的数据卷
目前Docker提供了三种不同的方式将数据从宿主机挂载到容器中:
1.volume
:Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes
目录中
目前所有容器的数据都保存在了这个目录下边,由于没有在创建时指定卷,所以Docker帮我们默认创建许多匿名卷(就上面这一堆很长ID的名字)。
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
可以看到我们挂载的数据卷
默认的数据卷是挂载在/var/lib/docker/volumes
目录下
进入数据卷目录下,可以发现这个挂载的目录和容器内的目录内容是同步的
接着我们测试一下
在数据卷里边的东西是可以持久化的。如果下次还需要创建一个nginx容器,那么还是复用当前数据卷里面的文件。
这里我们再新建一个容器测试一下,挂载数据卷的名称和上面一致
docker run -d -it --name test-nginx-2 -p 9090:80 -v test-nginx:/usr/share/nginx/html nginx
复制代码
访问暴露的端口,可以看到和我们上面创建的容器的内容是一样的
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
复制代码
进行测试
进入容器内,可以看到容器内的内容和宿主机目录的内容一致
同volumes一样,当我们清理掉容器之后,挂载目录里面的文件仍然还在,不会随着容器的结束而消失,从而实现数据持久化。
删除容器,发现挂载目录的文件依旧存在
近期评论