本文介紹Docker內部以及容器間的數據管理,在容器中管理數據主要有兩種方式:python
數據卷是一個可供一個或則多個目錄使用的特殊目錄,它繞過UFS,能夠提供不少有用的特性:web
注意: 數據卷 的使用,相似於 Linux 下對目錄或文件進行 mount,鏡像中的被指定爲掛載點的目錄中的文件會隱藏掉,能顯示看的是掛載的 數據卷docker
sudo docker volume create my-vol
查看全部的數據卷:ubuntu
docker volume ls DRIVER VOLUME NAME local my-vol
在主機裏使用以下命令能夠查看指定數據卷的信息:bash
sudo docker volume inspect my-vol [ { "CreatedAt": "2018-01-12T15:09:40+08:00", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/my-vol/_data", "Name": "my-vol", "Options": {}, "Scope": "local" } ]
在用docker run命令的時候,使用--mount標記來將數據卷掛在到容器裏,在一次的docker run中能夠掛載多個數據卷app
下面建立一個名爲 web 的容器,並加載一個 數據卷 到容器的 /webapp 目錄。webapp
sudo docker run -d -P \ --name web \ # -v my-vol:/wepapp \ --mount source=my-vol,target=/webapp \ training/webapp \ python app.py
在主機裏使用如下命令能夠查看 web 容器的信息測試
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": "" } ]
sudo docker volume rm my-vol
數據卷 是被設計用來持久化數據的,它的生命週期獨立於容器,Docker 不會在容器被刪除後自動刪除 數據卷 ,而且也不存在垃圾回收這樣的機制來處理沒有任何容器引用的 數據卷 。若是須要在刪除容器的同時移除數據卷。能夠在刪除容器的時候使用 docker rm -v 這個命令。無主的數據卷可能會佔據不少空間,要清理請使用如下命令code
無主的數據卷可能會佔據不少空間,要清理請使用如下命令
docker volume prune
使用 --mount 標記能夠指定掛載一個本地主機的目錄到容器中去。
sudo 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 目錄。這個功能在進行測試的時候十分方便,好比用戶能夠放置一些程序到本地目錄中,來查看容器是否正常工做。本地目錄的路徑必須是絕對路徑,之前使用 -v 參數時若是本地目錄不存在 Docker 會自動爲你建立一個文件夾,如今使用 --mount 參數時若是本地目錄不存在,Docker 會報錯
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
加了 readonly 以後,就掛載爲 只讀 了。若是你在容器內 /opt/webapp 目錄新建文件,會顯示以下錯誤
/opt/webapp # touch new.txt touch: new.txt: Read-only file system
在主機裏使用如下命令能夠查看 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
這樣就能夠記錄在容器輸入過的命令了。