1. 程式人生 > 其它 >Docker基本命令與使用 —— Docker Volume 容器卷(六)

Docker基本命令與使用 —— Docker Volume 容器卷(六)

官方文件地址: 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

注意:

  1. 如果指定卷沒有建立,則會自動建立
  2. 建議使用 --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

注意:

  1. 如果原始檔/目錄沒有不存在,不會自動建立,會丟擲一個錯誤
  2. 如果掛載目標在容器中非空目錄,則該目錄現有內容(容器中原有內容)將被隱藏

4. 小結:

Volume特點

  • 多個執行容器之間共享資料,多個容器可以同事掛載相同的卷
  • 當容器停止或被移除時,該卷依然存在
  • 當明確刪除卷時,卷才會被刪除
  • 將容器的資料儲存在遠端主機或其他儲存上(間接)
  • 將資料從一臺Docker主機遷移到另一臺時,先停止容器,然後備份卷的目錄(/var/lib/docker/volumes/)

Bind Mounts特點:

  • 從主機共享配置檔案到容器。預設情況下,掛載主機 /etc/resolv.conf到每個容器,提供DNS解析
   用法如下圖,掛載nginx.conf配置檔案到nginx容器中,替代預設的檔案
  • 在Docker主機上的開發環境和容器之間共享原始碼。例如,可以將Maven target目錄掛載到容器中,每次在Docker主機上購機Maven專案時,容器都可以訪問構建的專案包。
  • 當Docker主機的檔案或者目錄結構保證與容器所需的繫結掛載一致時