为什么需要数据卷
因为容器内的文件系统和宿主机的文件系统之间是隔离的,通过数据卷,可以把容器内和宿主机的文件目录关联起来。
数据卷可以理解为一卷相同的数据,会放在同一个位置。
绑定方式
匿名绑定
匿名绑定的方式,只需要指定容器内的目录即可,不需要指定容器外的目录,当容器被删除后,这个容器外的数据也会被删除,所以用的很少
docker run --rm -d -p 80:80 --name nginx_volume -v /usr/share/nginx/html nginx
查看容器的挂载信息,可以进入/var/lib/docker/volumes/d5c4ded82f96bdbbd1521b11b8dcc010c1a2298240f39277b20c0719b685d985/_data
目录修改index.html文件即可
docker inspect nginx_volume
或者通过下面命令,也可以查看数据卷信息
docker volume ls
需要注意的是,如果通过-f强制删除容器的话,数据卷也不会被删除
docker rm -f nginx_volume
如果使用Dockerfile里的VOLUME指定的的匿名绑定,容器被删除的时候,也不会被删除
具名绑定
具名绑定,需要指定数据卷的名称,例如nginx-html,这种方式,如果容器删除,相应的数据不会被删除。
如果我们不关心数据存在宿主机的哪个位置的话,这个方式用起来比较方便。
docker run --rm -d -p 80:80 --name nginx_volume -v nginx-html:/usr/share/nginx/html nginx
查看挂载到哪个目录
docker inspect nginx_volume
因为容器删除后,没有删除数据卷,可以手动删除
docker volume rm nginx-html
bind mount
可以把宿主机的某个目录,映射到容器里的某个目录去。如果宿主机的目录有内容的话,容器里的目录就直接用这个目录。如果宿主机的目录没有内容,则宿主机默认使用容器里目录的内容。如果有多个目录需要映射,则用多个-v。
docker run --rm -d -p 80:80 --name nginx_volume -v /usr/local/www:/usr/share/nginx/html -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf nginx
这种方式好像没有创建数据卷,通过如下方式,看不到数据卷信息
docker volume ls
volume 数据卷管理
创建一个volume
docker volume create volume-name
查看有什么volume
docker volume ls
查看volume 的详情
docker volume inspect volume-name
删除 volume
docker volume rm volume-name