开始之前
如果你有一些需要持续更新的数据并且希望持久化数据, 或者需要在不同的容器之间共享数据, 再者需要主机与容器之间共享数据, 那么你可以使用数据卷来满足这些需求.
数据卷定义
数据卷是一个可供一个或多个容器使用的特殊目录, 它绕过 UFS, 可以提供很多有用的特性:
数据卷可以在容器之间共享和重用.
对数据卷的修改会立马生效.
数据卷默认会一直存在, 即使容器被删除.
使用数据卷
数据卷有两种创建方式一是创建容器时创建数据卷, 二是先创建好数据卷, 在创建容器时挂载这个数据卷, 两种方式均可以.
创建一个数据卷
- docker volume create demo-data
- demo-data
创建容器使用 - v(--volume) 参数来挂载数据卷
- docker run --name demo1 -d -v demo-data:/var/www/html nginx:alpine
- docker run --name demo2 -d -v demo-data:/var/www/HTML nginx:alpine
列出数据卷
- docker volume ls
- DRIVER VOLUME NAME
- local demo-data
查看数据卷详细信息
- docker volume inspect demo-data
- [
- {
- "Driver": "local",
- "Labels": {},
- "Mountpoint": "/var/lib/docker/volumes/demo-data/_data",
- "Name": "demo-data",
- "Options": {},
- "Scope": "local"
- }
- ]
删除数据卷
- docker volume rm demo-data
- Error response from daemon: remove demo-data: volume is in use - [# 省略..]
注意: 由于有容器正在使用数据卷, 提示无法删除数据卷.
测试数据卷
宿主机写入数据
hostname> /var/lib/docker/volumes/demo-data/_data/hosts.txt
注意: 这个目录对应创建的 demo-data 数据卷.
容器写入数据
- docker exec -ti demo1 sh -c 'hostname>> /var/www/html/hosts.txt'
- docker exec -ti demo2 sh -c 'hostname>> /var/www/html/hosts.txt'
读取数据
- cat /var/lib/docker/volumes/demo-data/_data/hosts.txt
- node0
- 87c60cbe6147
- a6bc3c00c790
删除容器数据卷仍然保留
- docker stop demo1
- docker stop demo2
- docker rm demo1
- docker rm demo2
数据卷仍然存在
- docker volume ls
- DRIVER VOLUME NAME
- local demo-data
如果需要可以使用 rm 选项删除数据卷
docker volume rm demo-data
数据卷已不存在
- docker volume inspect demo-data
- []
- Error: No such volume: demo-data
命令帮助
创建容器时挂载数据卷参数
- docker run --help | grep '\-v,'
- -v, --volume list Bind mount a volume
删除容器时一并删除数据卷参数 (慎用)
- docker rm --help | grep '\-v'
- -v, --volumes Remove the volumes associated with the container
数据卷管理命令
- docker volume --help
- Usage: docker volume COMMAND
- Manage volumes
- Commands:
- create Create a volume
- inspect Display detailed information on one or more volumes
- ls List volumes
- prune Remove all unused local volumes
- rm Remove one or more volumes
小结
最后来总结下文章中的知识点
数据卷 是被设计用来持久化数据的, 它的生命周期独立于容器, Docker 不会在
容器被删除后自动删除数据卷 .
如果需要在删除容器的同时移除数据卷. 可以在删除容器
的时候使用 docker rm -v 这个命令.
参考文章
doker&k8s Qun [703906133]
来源: http://www.bubuko.com/infodetail-3297119.html