Docker 數據卷掛載

目錄

  1. 將數據從宿主機掛載到容器中的三種方式
  2. Volume
  3. Bind Mounts

將數據從宿主機掛載到容器中的三種方式

Docker提供三種方式將數據從宿主機掛載到容器中:
• volumes:Docker管理宿主機文件系統的一部分(/var/lib/docker/volumes)。保存數據的最佳方式。
• bind mounts:將宿主機上的任意位置的文件或者目錄掛載到容器中。
• tmpfs:掛載存儲在主機系統的內存中,而不會寫入主機的文件系統。如果不希望將數據持久存儲在任何位置,可以使用 tmpfs,同時避免寫入容器可寫層提高性能。
在這裏插入圖片描述

Volume

案例:兩個nginx共享一個數據卷

#創建數據卷
[root@k8s-master ~]# docker volume create nginx_vol
nginx_vol

#查看數據卷
[root@k8s-master ~]# docker volume ls
DRIVER              VOLUME NAME
local               nginx_vol

#查看某數據卷詳情
[root@k8s-master ~]# docker volume inspect nginx_vol
[
    {
        "CreatedAt": "2020-06-07T16:54:52+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/nginx_vol/_data",
        "Name": "nginx_vol",
        "Options": {},
        "Scope": "local"
    }
]
掛載的位置  
Mountpoint:/var/lib/docker/volumes/nginx_vol/_data

#創建兩個容器指定數據卷
[root@k8s-master ~]# docker run -d -p 80:80 --name mynginx01 --mount src=nginx_vol,dst=/usr/share/nginx/html nginx
80efb55b67c7352aba2acd9a8312678fb7f1de676dfcfc6ea330024f3bdff865


[root@k8s-master ~]# docker run -d -p 81:80 --name mynginx02 --mount src=nginx_vol,dst=/usr/share/nginx/html nginx
a9064351c75c7ef776a4f728160ab875adfff5f7c08aa3a1b53d1f42e97e09ee


#進入掛載的目錄下,更新index.html目錄
[root@k8s-master ~]# cd /var/lib/docker/volumes/nginx_vol/_data
[root@k8s-master _data]# ll
總用量 8
-rw-r--r--. 1 root root 494 526 23:00 50x.html
-rw-r--r--. 1 root root 612 526 23:00 index.html

在這裏插入圖片描述

#刪除其中一個容器,不影響另一個容器的使用,因爲兩個容器公用同一份數據,如果不掛載數據卷,每個容器的數據都是獨立的,一旦出現容器啓動異常,數據拿取失敗就得不償失了.

Bind Mounts

案例與上同理
掛載方式默認是volume,需要指定掛在類型爲bind
此掛載方式適合用於產生臨時文件場景

注意:

  1. 如果源文件/目錄沒有存在(src),不會自動創建,會拋出一個錯誤。
  2. 如果掛載目標在容器中非空目錄,則該目錄現有內容將被隱藏
[root@k8s-master ~]# docker run -d -p 80:80 --name=nginx-test --mount type=bind,src=/mnt,dst=/usr/share/nginx/html nginx 

總結兩種常用數據卷:

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

Bind Mounts特點
• 從主機共享配置文件到容器。默認情況下,掛載主機/etc/resolv.conf到每個容器,提供DNS解析。
• 在Docker主機上的開發環境和容器之間共享源代碼。例如,可以將Maven target目錄掛載到容器中,每次在Docker主機 上構建Maven項目時,容器都可以訪問構建的項目包。
• 當Docker主機的文件或目錄結構保證與容器所需的綁定掛載一致時

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章