本文章是在網(wǎng)易云課堂的課程學(xué)習(xí)中編寫,部分圖片從網(wǎng)易云課堂ppt引用
【Docker 數(shù)據(jù)管理】
在容器中管理數(shù)據(jù)主要有兩種方式:
- 數(shù)據(jù)卷(Volumes):在docker管理范圍內(nèi),在docker內(nèi)部
- 掛載主機(jī)目錄(Bind mounts)
- 掛載文件
【一、數(shù)據(jù)卷】
1、數(shù)據(jù)卷是一個可供一個或多個容器使用的特殊目錄,它繞過UFS,可以提供很多有用的特性:
- 數(shù)據(jù)卷可以在容器之間共享和重用
- 對數(shù)據(jù)卷的修改會立馬生效
- 對數(shù)據(jù)卷的更新,不會影響鏡像
- 數(shù)據(jù)卷默認(rèn)會一直存在,即使容器被刪除
注意:數(shù)據(jù)卷的使用,類似于Linux下對目錄或文件進(jìn)行mount,鏡像中的被指定為掛載點(diǎn)的目錄中的文件會隱藏掉,能顯示看的是掛載的數(shù)據(jù)卷。
2、Docker中提供了兩種掛載方式,-v和-mount,官方推薦使用-mount
創(chuàng)建一個數(shù)據(jù)卷test
docker volume create test查看所有的數(shù)據(jù)卷
docker volume ls查看指定數(shù)據(jù)卷的信息
docker volume inspect test
3、啟動一個掛載數(shù)據(jù)卷的容器
這里我們使用session-web:latest鏡像
創(chuàng)建一個名為 web 的容器,并加載一個 數(shù)據(jù)卷 到容器的 /webapp 目錄
docker run --name web -d -p 8888:8080 --mount source=test,target=/webapp session-web:latest
刪除名為test的數(shù)據(jù)卷
docker volume rm test
1)數(shù)據(jù)卷 是被設(shè)計(jì)用來持久化數(shù)據(jù)的,它的生命周期獨(dú)立于容器
2)Docker 不會在容器被刪除后自動刪除 數(shù)據(jù)卷,并且也不存在垃圾回收這樣的機(jī)制來處理沒有任何容器引用的 數(shù)據(jù)卷
3)如果需要在刪除容器的同時移除數(shù)據(jù)卷,可以在刪除容器的時候使用 docker rm -v 這個命令
無主的數(shù)據(jù)卷可能會占據(jù)很多空間,要清理則使用以下命令:
docker volume prune
【二、掛載主機(jī)目錄】
加載主機(jī)的 /home/docker 目錄到容器的 /opt/webapp目錄
docker run --name web1 -d -p 8890:8080 --mount type=bind,source=/home/docker,target=/opt/webapp session-web:latest
1)這個功能在進(jìn)行測試的時候十分方便,比如用戶可以放置一些程序到本地目錄中,來查看容器是否正常工作
2)本地目錄的路徑必須是絕對路徑,使用 --mount 參數(shù)時如果本地目錄不存在,Docker 會報錯
3)Docker 掛載主機(jī)目錄的默認(rèn)權(quán)限是 讀寫,也可以通過增加 readonly 指定為 只讀
【三、掛載文件】
1、掛載一個本地主機(jī)文件作為數(shù)據(jù)卷
docker run --rm -it --mount type=bind,source=$HOME/.bash_history,target=/root/.bash_history session-web:latest bash
這樣就可以記錄在容器輸入過的命令了