數據卷 是一個可供一個或多個容器使用的特殊目錄,它繞過UFS,能夠提供不少有用的特性:python
注意:數據卷 的使用,相似於 Linux 下對目錄或文件進行 mount,鏡像中的被指定爲掛載點的目錄中的文件會隱藏掉,能顯示看的是掛載的 數據卷。web
$ docker volume create my-vol
查看全部的 數據卷docker
$ docker volume ls
查看指定的數據卷信息ubuntu
$ docker volume inspect my-vol [ { "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/my-vol/_data", "Name": "my-vol", "Options": {}, "Scope": "local" } ]
在用 docker run
命令的時候,使用 --mount
標記來將 數據卷 掛載到容器裏。在一次 docker run
中能夠掛載多個 數據卷。bash
示例:app
$ docker run -d -P \ --name web \ # -v my-vol:/wepapp \ --mount source=my-vol,target=/webapp \ training/webapp \ python app.py
在主機裏使用如下命令能夠查看 web 容器的信息webapp
$ docker inspect web
數據卷 信息在 "Mounts" Key 下面設計
"Mounts": [ { "Type": "volume", "Name": "my-vol", "Source": "/var/lib/docker/volumes/my-vol/_data", "Destination": "/app", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ],
$ docker volume rm my-volcode
數據卷 是被設計用來持久化數據的,它的生命週期獨立於容器,Docker不會在容器被刪除後自動刪除數據卷,而且也不存在垃圾回收這樣的機制來處理沒有任何容器引用的 數據卷。若是須要在刪除容器的同時移除數據卷。能夠在刪除容器的時候使用 docker rm -v
這個命令。生命週期
無主的數據卷可能會佔據不少空間,要清理請使用如下命令
$ docker volume prune
使用 --mount 標記能夠指定掛載一個本地主機的目錄到容器中去。
$ docker run -d -P \ --name web \ # -v /src/webapp:/opt/webapp \ --mount type=bind,source=/src/webapp,target=/opt/webapp \ training/webapp \ python app.py
上面的命令加載主機的 /src/webapp 目錄到容器的 /opt/webapp目錄。
Docker 掛載主機目錄的默認權限是 讀寫,用戶也能夠經過增長 readonly 指定爲 只讀。
$ docker run -d -P \ --name web \ # -v /src/webapp:/opt/webapp:ro \ --mount type=bind,source=/src/webapp,target=/opt/webapp,readonly \ training/webapp \ python app.py
在主機裏使用如下命令能夠查看 web 容器的信息
$ docker inspect web
掛載主機目錄 的配置信息在 "Mounts" Key 下面
"Mounts": [ { "Type": "bind", "Source": "/src/webapp", "Destination": "/opt/webapp", "Mode": "", "RW": true, "Propagation": "rprivate" } ],
--mount
標記也能夠從主機掛載單個文件到容器中
示例:
$ docker run --rm -it \ # -v $HOME/.bash_history:/root/.bash_history \ --mount type=bind,source=$HOME/.bash_history,target=/root/.bash_history \ ubuntu:17.10 \ bash root@2affd44b4667:/# history 1 ls 2 diskutil list