所谓的容器数据持久化,就是将宿主机的某个目录,挂载到容器的指定路径挂载点,当删除容器时,宿主机的数据并不会丢失
当容器的挂载点有数据时,直接使用宿主机的路径挂载,可能会将容器原有的数据直接清空并覆盖
我们话不多说 直接上案例~
在宿主机创建目录
mkdir -pv /volume/data/
mkdir -pv /volume/data2/
echo test > /volume/data/index.html
docker run -d –name t4 –network host -v /volume/data/:/usr/share/nginx/html/ nginx
#查看容器的网络IP(使用桥接网络或者自定义网络时使用 上面使用的host 可以直接宿主机网络ip进行访问即可)
docker inspect t4 | grep IPAddress
#curl ip 看到我们写入的内容
删除容器观察数据是否丢失
#删除容器
docker container rm -f `docker container ps -qa`
#再次创建容器并且挂载
docker run -d –name c1 –network host -v /volume/data/:/usr/share/nginx/html/ nginx
#内容当然不会丢失
多个容器挂载一个目录
-p 参数是向宿主机暴露容器内部的80端口
–volumes-from 和t5共享挂载目录
docker run -d –name t5 -p 81:80 -v /volume/data/:/usr/share/nginx/html/ nginx
docker run -d –name t6 -p 82:80 –volumes-from nginx
一个容器可以配置多个宿主机目录
docker run -d –name y1 -v /volume/data/:/volume/data/ -v /volume/data2/:/volume/data2/ alpine
docker内置的存储卷管理
创建存储卷
docker volume create v1
查看存储卷列表
docker volume ls
默认存储卷位置路径
/var/lib/docker/volumes/
查看存储卷的详细信息
docker volume inspect v1
{
“CreatedAt”: “2022-03-05T10:12:27+08:00”,
“Driver”: “local”,
“Labels”: {},
“Mountpoint”: “/var/lib/docker/volumes/v1/_data”,
“Name”: “v1”,
“Options”: {},
“Scope”: “local”
}
容器使用存储卷
容器使用已有的存储卷
容器创建时若存储卷不存在,则会直接创建 然后将容器内部映射的目录内容拷贝到外部虚拟机所在的存储卷位置
docker run -d –name t7 -p 88:80 -v v1:/usr/share/nginx/html nginx
匿名(随机)存储卷
创建容器时若不指定存储卷,则默认会生成匿名(随机)存储卷
docker run -d –name t8 -p 89:80 -v /usr/share/nginx/html nginx
使用匿名(随机)存储或者忘记了 不知道路径在哪里怎么办
docker container inspect -f “{{.Mounts}}” t8
移除所有未使用的存储卷
当空间不足时可以使用 但是必须搞明白存储卷保存的数据是否有用~
删除使用的存储卷时将无法删除 出于保护的作用
docker volume prune -f
删除指定的存储卷
docker volume rm 存储卷名
下一节将说明Dockerfile~