在 Docker 內部以及容器之間管理數據,在容器中管理數據主要有兩種方式:python
數據卷(Data Volumes)web
掛載主機目錄 (Bind mounts)docker
數據卷是一個可供一個或多個容器使用的特殊目錄,它繞過UFS,能夠提供不少有用的特性: 數據卷 能夠在容器之間共享和重用 對 數據卷 的修改會立馬生效 對 數據卷 的更新,不會影響鏡像 數據卷 默認會一直存在,即便容器被刪除bash
數據卷 的使用,相似於 Linux 下對目錄或文件進行 mount,鏡像中的被指定爲掛載點的目錄中的文件會隱藏掉, 能顯示看的是掛載的 數據卷。app
選擇 -v 仍是 -–mount 參數: Docker 新用戶應該選擇--mount參數,經驗豐富的 Docker 使用者對-v或者 --volume已經很熟悉了, 可是推薦使用--mount參數。webapp
建立一個數據卷
docker volume create my-vol
查看全部的數據卷
docker volume ls
查看指定的數據卷的信息
docker volume inspect my-vol
複製代碼
啓動一個掛載數據卷的容器:在用docker run命令的時候,使用--mount標記來將 數據卷 掛載到容器裏。在一次docker run中能夠掛載多個 數據卷。下面建立一個名爲 web 的容器, 並加載一個 數據卷 到容器的 /webapp 目錄。測試
docker run -d -P --name web --mount source=my-vol,target=/webapp training/webapp python app.py
複製代碼
查看主機的web容器的信息
docker inspect web
刪除容器
docker rm -f 容器id
刪除數據卷
docker volume rm my-vol
複製代碼
數據卷 是被設計用來持久化數據的,它的生命週期獨立於容器,Docker 不會在容器被刪除後自動刪除 數據卷,而且也不存在垃圾回收這樣的機制來處理沒有任何容器引用的 數據卷。 若是須要在刪除容器的同時移除數據卷。能夠在刪除容器的時候使用docker rm -v這個命令。ui
無主的數據卷可能會佔據不少空間,要清理請使用如下命令. docker volume prunespa
掛載一個主機目錄做爲數據卷:使用 --mount 標記能夠指定掛載一個本地主機的目錄到容器中去。
docker run -d -P --name web2 --mount type=bind,source=/webapp,target=/opt/webapp training/webapp python app.py
複製代碼
這條命令加載主機的 /webapp 目錄到容器的 /opt/webapp目錄。這個功能在進行測試的時候十分方便,好比用戶能夠放置一些程序到本地目錄中,來查看容器是否正常工做。本地目錄的路徑必須是絕對路徑,之前使用 -v 參數時若是本地目錄不存在 Docker 會自動爲你建立一個文件夾,如今使用 --mount 參數時若是本地目錄不存在,Docker 會報錯。設計
docker 掛載主機目錄的默認權限是 讀寫,用戶也能夠經過增長readonly指定爲 只讀
docker run -d -P --name web3 --mount type=bind,source=/webapp,target=/opt/webapp,readonly training/webapp python app.py
加了readonly以後,就掛載爲 只讀 了。若是你在容器內 /opt/webapp 目錄新建文件,會顯示以下錯誤:Read-only file system
查看web3的容器信息
docker inspect web3
複製代碼