在docker中,掛載就是用宿主機的文件或文件夾覆蓋容器內的文件或文件夾,可以實現宿主機和容器目錄(文件)的雙向數據自動同步。
本教程操作環境:linux5.9.8系統、docker-1.13.1版、Dell G3電腦。
docker掛載就是用本機文件或文件夾覆蓋容器內的文件或文件夾。
作用:
我們cp命令來實現數據傳遞,這種方式比較麻煩;
我們通過容器目錄掛載,可以實現宿主機和容器目錄的雙向數據自動同步,能夠輕松實現代碼上傳,配置修改,日志同步等需求。
注:docker 掛載配置文件時,一定要注意不要把要掛載的配置文件的內容寫錯,否則創建容器之后,啟動不了
文件夾掛載
host上文件夾一定會覆蓋container中文件夾:
host | container | mount result |
文件夾不存在/文件夾存在但為空 | 文件夾不存在/存在但為空/存在且不為空 | container中文件被覆蓋(清空) |
文件夾存在且不為空 | 文件夾不存在/存在但為空/存在且不為空 | container中文件夾內容被覆蓋(原內容清空, 覆蓋為host上文件夾內容) |
-
允許不存在的文件夾或者存在的空文件夾掛載進container, container中對應的文件夾將被清空
-
非空文件夾掛載進container將會覆蓋container中原有文件夾
文件掛載
文件掛載與文件夾掛載最大的不同點在于:
-
docker 禁止用主機上不存在的文件掛載到container中已經存在的文件
-
文件掛載不會對同一文件夾下的其他文件產生任何影響
-
存在的文件掛載進container中將會覆蓋container中對應的文件, 若文件不存在則新建
總結
host上文件一定會覆蓋container中文件
host | container | mount result |
不存在的文件 | 已經存在的文件 | 禁止行為 |
存在的文件 | 不存在的文件/已經存在的文件 | 新增/覆蓋 (若目錄不存在則會創建目錄) |
應用場景
從上面的分析可知,文件夾掛載以整個文件夾為單位進行文件覆蓋,故可在需要將大量文件掛載進container時使用,另外,如果掛載一個空文件夾或者不存在的文件夾,一般是做逆向使用: 即容器啟動后,可能會在容器內掛載點的文件夾下生成一些文件(如日志),此時,在對應的host上的文件夾內就能直接看到。
文件掛載由于只會覆蓋單個文件而不會影響container中同一文件夾下的其他文件,常常被用來掛載配置文件,以在運行時,動態的修改默認配置。
推薦學習:《docker視頻教程》