4-1 Volume和Bind Mount
容器删除后里面的数据会丢,怎么才能保持删除之后数据不丢呢?这就需要用到数据卷去管理。
Docker提供三种不同的方式将数据从宿主机挂载到容器中:
Volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)
Bind mounts:可以存储在宿主机系统的任意位置。相当于软连接的概念
Tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统
Volumes
创建volumes
docker volume create nginx-vol
创建一个数据持久化的容器(多个容器可以共用一个数据卷,实现数据共享)。
查看卷目录。
docker run -itd --name=nginx-test -p 88:80 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx ls /var/lib/docker/volumes/nginx-vol/_data/
查看volumes
docker volume ls
查看卷的详细信息
docker volume inspect nginx-vol
删除数据卷
docker container stop nginx-test docker container rm nginx-test docker volume rm nginx-vol
删除所有的容器
docker rm -f $(docker ps -q -a)
注意:
1. 如果没有指定卷,会自动创建
2. 建议使用-mount
Bind Mounts挂载
用卷创建一个容器:
创建数据卷之前需在宿主机创建挂载目录
mkdir -p /app/wwwroot docker run -itd --name=nginx-test --mount type=bind,src=/app/wwwroot/,dst=/usr/share/nginx/html nginx
在/app/wwwroot touch个aaa的文件
查看容器目录是否有aaa文件
docker container exec nginx-test ls /usr/share/nginx/html
绑定验证:
docker inspect nginx-test
删除:
docker container stop nginx-test docker container rm nginx-test
注意:
1. 如果源文件/目录不存在,不会自动创建,会报错
2. 如果挂载目标在容器中非空目录,则该目录现有的内容会被隐藏