4-1 VolumeBind Mount


容器删除后里面的数据会丢,怎么才能保持删除之后数据不丢呢?这就需要用到数据卷去管理。

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

VolumesDocker管理宿主机文件系统的一部分(/var/lib/docker/volumes)

Bind mounts:可以存储在宿主机系统的任意位置。相当于软连接的概念

Tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统

111.png

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 touchaaa的文件

查看容器目录是否有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. 如果挂载目标在容器中非空目录,则该目录现有的内容会被隐藏