Docker基本命令與使用 —— Docker Volume 容器卷(六)
阿新 • • 發佈:2022-05-11
官方文件地址: https://docs.docker.com/storage/volumes/
1. Docker提供三種方式將資料從宿主機掛載到容器中
- volumes: Docker管理宿主機檔案系統的一部分(/var/lib/docker/volumes)。儲存資料的最佳方式。
- bind mounts: 將宿主機上的任意位置的檔案或目錄掛載到容器中。
- tmpfs: 掛載儲存在主機系統的記憶體中,而不會寫入主機的檔案系統。如果不希望將資料持久儲存在任何位置,可以使用tmpfs,同事避免寫入容器可寫層提高效能。(此種方式不常用,這裡暫不討論)
2. Volume
管理卷:
docker volume create wwwroot docker volume ls docker volume inspect wwwroot
實際檔案目錄為 /var/lib/docker/volumes下,但一般不建議更改。(如需指定目錄,用bind方式)
用卷建立一個容器:
#/usr/share/nginx/html為nginx預設網站的跟目錄 docker run -d --name=nginx-text --mount src=wwwroot,dst=/usr/share/nginx/html nginx docker run -d --name=nginx-test -v wwwroot:/usr/share/nginx/html nginx
以上兩個命令效果一樣,mount命令是新出來,用於替換 -v ,看上去更加清晰
清理:
docker stop nginx-test docker rm nginx-test docker volume rm wwwroot
注意:
- 如果指定卷沒有建立,則會自動建立
- 建議使用 --mount,更通用
3. Bind Mounts
宿主機上的檔案或目錄掛載到容器中。此命令類似於linux ln -s,軟連線用卷建立一個容器:
docker run -d --name=nginx-text --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
docker run -d --name=nginx-test -v /app/wwwroot:/usr/share/nginx/html nginx
注意:
- 如果原始檔/目錄沒有不存在,不會自動建立,會丟擲一個錯誤
- 如果掛載目標在容器中非空目錄,則該目錄現有內容(容器中原有內容)將被隱藏
4. 小結:
Volume特點
- 多個執行容器之間共享資料,多個容器可以同事掛載相同的卷
- 當容器停止或被移除時,該卷依然存在
- 當明確刪除卷時,卷才會被刪除
- 將容器的資料儲存在遠端主機或其他儲存上(間接)
- 將資料從一臺Docker主機遷移到另一臺時,先停止容器,然後備份卷的目錄(/var/lib/docker/volumes/)
Bind Mounts特點:
- 從主機共享配置檔案到容器。預設情況下,掛載主機 /etc/resolv.conf到每個容器,提供DNS解析
- 在Docker主機上的開發環境和容器之間共享原始碼。例如,可以將Maven target目錄掛載到容器中,每次在Docker主機上購機Maven專案時,容器都可以訪問構建的專案包。
- 當Docker主機的檔案或者目錄結構保證與容器所需的繫結掛載一致時