数据卷

概念

  • 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

    • 数据卷可以在容器之间共享和重用
    • 对数据卷的修改会立马生效
    • 对数据卷的更新,不会影响镜像
  • 类似于 linux 下的 mount 命令,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的数据卷

命令

  1. # 创建
  2. docker volume create my-vol
  3. # 查看所有数据卷
  4. docker volume ls
  5. # 查看单个数据卷详情
  6. docker volume inspect my-vol
  7. # 示例数据
  8. [
  9. {
  10. "CreatedAt": "2019-08-18T05:34:18Z",
  11. "Driver": "local",
  12. "Labels": {},
  13. "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
  14. "Name": "my-vol",
  15. "Options": {},
  16. "Scope": "local"
  17. }
  18. ]
  19. # 删除
  20. docker volume rm my-vol
  21. # 删除所有无主的数据卷
  22. docker volume prune

容器内应用

  1. # 示例, 启动一个 python web app
  2. docker run -d -P \
  3. --name web \
  4. # -v my-vol:/wepapp \
  5. --mount source=my-vol,target=/webapp \
  6. training/webapp \
  7. python app.py
  8. # 查看详情
  9. docker inspect web
  10. # 数据卷信息位于 mount key 下
  11. "Mounts": [
  12. {
  13. "Type": "volume",
  14. "Name": "my-vol",
  15. "Source": "/var/lib/docker/volumes/my-vol/_data",
  16. "Destination": "/app",
  17. "Driver": "local",
  18. "Mode": "",
  19. "RW": true,
  20. "Propagation": ""
  21. }
  22. ],

挂载主机目录

命令与示例

  1. # 挂载目录,--mount 参数若宿主机目录不存在会报错,-v 参数不存在自动新建(旧版本)
  2. # readonly 控制权限为只读,默认为读写
  3. docker run -d -P \
  4. --name web \
  5. # -v /src/webapp:/opt/webapp \
  6. --mount type=bind,source=/src/webapp,target=/opt/webapp readonly \
  7. training/webapp \
  8. python app.py
  9. # 挂载目录
  10. docker run --rm -it \
  11. # -v $HOME/.bash_history:/root/.bash_history \
  12. --mount type=bind,source=$HOME/.bash_history,target=/root/.bash_history \
  13. ubuntu:18.04 \
  14. bash
  15. # 容器内查看
  16. docker inspect web
  17. # 数据示例
  18. "Mounts": [
  19. {
  20. "Type": "bind",
  21. "Source": "/src/webapp",
  22. "Destination": "/opt/webapp",
  23. "Mode": "",
  24. "RW": true,
  25. "Propagation": "rprivate"
  26. }
  27. ],