目錄
- 將數據從宿主機掛載到容器中的三種方式
- Volume
- 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 5月 26 23:00 50x.html
-rw-r--r--. 1 root root 612 5月 26 23:00 index.html
#刪除其中一個容器,不影響另一個容器的使用,因爲兩個容器公用同一份數據,如果不掛載數據卷,每個容器的數據都是獨立的,一旦出現容器啓動異常,數據拿取失敗就得不償失了.
Bind Mounts
案例與上同理
掛載方式默認是volume,需要指定掛在類型爲bind
此掛載方式適合用於產生臨時文件場景
注意:
- 如果源文件/目錄沒有存在(src),不會自動創建,會拋出一個錯誤。
- 如果掛載目標在容器中非空目錄,則該目錄現有內容將被隱藏
[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主機的文件或目錄結構保證與容器所需的綁定掛載一致時