目录
PS:关于卷的官方文档:https://docs.docker.com/storage/
1. 三种挂载数据的方法
- volumes
docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。
保存数据的最佳方式。
- bind mounts
将宿主机上的任意位置文件或者目录挂载到容器中。
- tmpfs
挂载存储在主机的内存中,不持久存储。
常用为 volumes,bind mounts,tmpfs并不常用
2. 管理卷
Volume:
volume属于管理命令
命令下的参数比较少,也比较好理解
create //创建
inspect //查看卷详情
ls //列出卷
rm //删除卷
prune //删除所有未使用的卷
创建一个卷
$ docker volume create web_01_vol
创建的卷在这个目录下:
/var/lib/docker/volumes
如何挂载
如何挂载这个卷到容器中
$ docker container run -itd --name=web_01 -p 8080:80 --mount src=web_01_vol,dst=/usr/share/nginx/html nginx
容器创建成功后,该目录也会挂载到 /var/lib/docker/volumes/web_01_vol/_data
修改index.html文件 验证
如果没有指定挂载卷,会自动挂载一个卷
重新创建一个卷积,共用一个卷,卷积的文件通用,数据卷不会因为容器的删除而丢失,它会长期保留。
$ docker container run -d --name=test_01 --mount src=web_01_vol,dst=/usr/share/nginx/html nginx
删除卷
$ docker container stop 7740ca246029 f11f0c5fbcf5 //关机
$ docker container rm f11f0c5fbcf5 7740ca246029 //删除容器
$ docker volume rm web_01_vol //删除卷
Bind Mounts
它是将宿主机的某个文件挂载到容器中
其命令格式都一样
实例:
创建一个Bind 卷
假如宿主机 /home/目录下有个1.txt文件需要挂载到容器中
目录跟文件均可挂载,挂载到容器的文件和目录跟宿主机其实差不多是一个软链接状态,容器中改变文件或宿主机改变文件都会受影响。
$ docker container run -itd --name=test_01 --mount type=bind,src=/home/test/123.txt,dst=/home/1.txt centos
验证
如果没有指定卷,会报错。
$ docker container inspect c4a1deeb58d2
删除Bind卷
跟Volume一样
$ docker container stop 7740ca246029 f11f0c5fbcf5 //关机
$ docker container rm f11f0c5fbcf5 7740ca246029 //删除容器
$ docker volume rm web_01_vol //删除卷
Volume 与 Bind 特点
Volume
- 多个运行容器之间共享数据,多个容器可以同时挂载相同的卷。
- 当容器停止或被移除时,该卷依然存在。
- 当明确删除卷时,卷才会被删除。
- 将容器的数据存储在远程主机或其他存储上(间接)
- 将数据从一台Docker主机迁移到另一台时,先停止容器,然后备份卷的目(/var/lib/docker/volumes/)
Bind
- 从主机共享配置文件到容器。默认情况下,挂载主机/etc/resolv.conf到每个容器,提供DNS解析。
- 在Docker主机上的开发环境和容器之间共享源代码。例如,可以将Maven target目录挂载到容器中,每次在Docker主机
- 上构建Maven项目时,容器都可以访问构建的项目包。
- 当Docker主机的文件或目录结构保证与容器所需的绑定挂载一致时