網站首頁 編程語言 正文
Docker 提供了三種方式將數據從宿主機掛載到 Docker容器中: volumes、bind mounts、tmpfs 。
Volumes是在宿主機文件系統的一個路徑,默認情況下統一的父路徑是 /var/lib/docker/volumes/
,非 Docker 進程不能修改這個路徑下面的文件,所以說 Volumes 是容器數據持久存儲數據最安全的一種方式。Bind mounts 可以將文件存儲在宿主機文件系統的任何路徑,所以非 Docker進程也可以對其進行修改,存在潛在的安全風險。Tmpfs 只存儲在宿主機的內存中,不會寫入到宿主機文件系統中,不會持久化存儲。
本文我們先來介紹其中的兩種:Bind mounts與Tmpfs。Volumes 由于相對重要,會單獨起一個文章進行說明。
一、Tmpfs掛載
需要再次強調的是tmpfs
掛載是臨時的,只存留在容器宿主機的內存中。當容器停止時,tmpfs
掛載文件路徑將被刪除,在那里寫入的文件不會被持久化。
docker run -d \ -p 8888:8888 \ --tmpfs /tmp \ --name spboot zimug/docker-test:1
學過SpringBoot的同學可能都知道,SpringBoot項目啟動之后會在/tmp目錄下面解壓出tomcat容器,提供web服務。
所以將/tmp
目錄使用tmpfs方式掛載到宿主機的內存中,不僅場景合適,也會提升springboot項目的運行效率(內存操作)。
二、Bind mounts
其實Bind Mounts掛載數據卷的方式也是大家最常見的一種方式,比如使用-v
參數綁定數據卷,其中/root/nginx/html
是我們任意指定的一個宿主機磁盤文件目錄,這種情況下就是Bind mounts方式掛載數據卷。
-v /root/nginx/html:/usr/share/nginx/html/
除了使用-v
參數綁定的方式,還可以使用--mount
參數綁定的方式實現Bind mounts數據卷掛載。在--mount
參數綁定的方式之前,我們先創建一個宿主機文件路徑mkdir -p /root/nginx/html
用于做實驗 。
docker run -d --name bind-mount-nginx \ -p 80:80 \ --mount type=bind,source=/root/nginx/html,target=/usr/share/nginx/html/,readonly \ nginx:latest
--mount
以鍵值對的方式傳參,比-v
提供了更多的選項
-
type=bind
表示以Bind mounts方式掛載數據卷 -
source=/root/nginx/html
表示宿主機的文件路徑 -
target=/usr/share/nginx/html/
表示容器的文件路徑,宿主機source文件路徑掛載到容器的target路徑readonly配置參數,表示文件路徑采用只讀的方式掛載
三、Bind mounts-測試是否正確掛載數據卷
在宿主機 /root/nginx/html
目錄下新建一個index.html
,文件內容如下
<!DOCTYPE html> <html> <body> <h1>Bind mounts</h1> </body> </html>
訪問容器宿主機服務器80端口得到如下的響應結果,證明數據卷掛載成功了。
四、Bind mounts-驗證只讀掛載
在--mount
中加入一個readonly配置參數,表示文件路徑采用只讀的方式掛載。即:該路徑下的文件可以在宿主機上進行修改,但是容器內的應用程序不能修改該文件。
--mount type=bind,source=/root/nginx/html,target=/usr/share/nginx/html/,readonly
可以通過docker inspect <容器ID或容器名稱>
查看數據卷的掛載結果,如下
"Mounts": [
? ? {
? ? ? ? "Type": "bind",
? ? ? ? "Source": "/root/nginx/html",
? ? ? ? "Destination": "/usr/share/nginx/html",
? ? ? ? "Mode": "",
? ? ? ? "RW": false,
? ? ? ? "Propagation": "rprivate"
? ? }
],
- 數據卷掛載類型是bind(mount bind)
- 宿主機源路徑
/root/nginx/html
,容器掛載目標路徑/usr/share/nginx/html
-
"RW": false
表示只讀模式,路徑內文件不能被容器內程序修改
大家可以通過docker exec -it <容器ID或容器名稱> /bin/bash
進入容器內部嘗試修改/usr/share/nginx/html
路徑下的文件,看看能不能修改,相信經過你的驗證答案一定是否定的。
原文鏈接:https://blog.csdn.net/hanxiaotongtong/article/details/124996442
相關推薦
- 2023-02-10 docker實現跨宿主機的容器之間網絡互聯_docker
- 2022-07-24 C++超詳細實現二叉樹的遍歷_C 語言
- 2023-02-05 scipy.interpolate插值方法實例講解_python
- 2022-02-23 C#使用log4net記錄日志_C#教程
- 2022-05-21 C語言實現銀行管理系統(文件操作)_C 語言
- 2023-01-26 Python編程之順序執行與程序的主入口詳解_python
- 2021-12-17 Windows下Flutter+Idea環境搭建及配置_Android
- 2022-08-26 C++?超詳細示例講解list的使用_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支