Docker 數據管理 - 掛載目錄或文件
通過前面小節的學習我們知道:使用Docker時,產生的數據默認是保存到容器的UnionFS的讀寫層中的。那么,我們不妨思考下這兩個問題:
- 如果不啟動容器卻想訪問數據該怎么辦?
- 容器被銷毀或損壞,數據也就消失了,這合理嗎?
是的,我想我們的答案應該是一樣的,容器和數據不應該被綁定在一起。為此,Docker 提供了兩類數據管理的方式:
- 掛載宿主機目錄或文件;
- 使用數據卷;
本節,我們將介紹如何將宿主機的目錄或文件掛載到 Docker 容器。
1. 掛載宿主機目錄
我們可以將宿主機的目錄,掛載到容器內,容器與宿主機的目錄可以實時共享。在宿主機上執行如下命令:
# 新建一個目錄
mkdir -p ~/mydir/tmp
# 在目錄中新建一個文件,填充內容 hello docker
echo "hello docker" > ~/mydir/tmp/text.txt
然后新建一個容器 busybox,將 /mydir/tmp
目錄掛載到容器的 /tmp/
目錄:
docker run -d -it --name busybox -v ~/mydir/tmp/:/tmp/ busybox
Tips:掛載宿主操作系統目錄的參數是
-v <宿主機目錄路徑>:<容器目錄路徑>
。
確認查看容器對應的文件內容:
docker exec -it busybox cat /tmp/text.txt
如圖所示:
2. 掛載宿主機文件
我們也可以將宿主機的文件掛載到容器內,實現文件的共享。新建一個容器 busybox2,將 /mydir/tmp/text.txt
文件掛載到容器的 /tmp/text.txt
:
docker run -d -it --name busybox2 -v ~/mydir/tmp/text.txt:/tmp/text.txt busybox
Tips:掛載宿主操作系統目錄的參數是
-v <宿主機文件路徑>:<容器文件路徑>
。
確認容器對應的文件內容:
docker exec -it busybox2 cat /tmp/text.txt
如圖所示:
Tips:使用
docker rm -f busybox busybox2
移除不再使用的容器。
3. 小結
通過掛載宿主機的目錄或文件,可以在宿主機和容器間方便地共享數據,包括將提前準備好的配置文件掛載到容器,或者在開發調試過程中將代碼移入 Docker 環境試運行等。