Docker數(shù)據(jù)卷和掛載目錄的使用
docker 在容器中管理數(shù)據(jù)主要有兩種方式:
- 數(shù)據(jù)卷( Volumes )
- 掛載主機(jī)目錄( Bind mounts )
準(zhǔn)備
刪除容器
docker rm -f $(docker ps -aq)
創(chuàng)建并運(yùn)行一個(gè)容器
方法一 docker run -itd \ --name t1 \ -p 8080:8080 \ --mount source=v1,target=/usr/local/tomcat/webapps \ tomcat:8.5.20 方法二 docker start c1 docker exec -it c1 bash
數(shù)據(jù)卷(Volumes)
掛載和數(shù)據(jù)卷的區(qū)別:數(shù)據(jù)卷和替換整個(gè)目錄而掛載只會替換一個(gè)文件夾或者一個(gè)文件,所以掛載的使用性更高;數(shù)據(jù)卷替換所有文件后可能導(dǎo)致tomcat 或者 mysql無法使用 因?yàn)榕渲梦募蝗刻鎿Q
為了很好的實(shí)現(xiàn)數(shù)據(jù)保存和數(shù)據(jù)共享, Docker 提出了 Volume 這個(gè)概念,簡單的說就是繞過默認(rèn)的聯(lián)合
文件系統(tǒng),而以正常的文件或者目錄的形式存在于宿主機(jī)上。又被稱作數(shù)據(jù)卷。
數(shù)據(jù)卷 是一個(gè)可供一個(gè)或多個(gè)容器使用的特殊目錄,它繞過 UFS ,可以提供很多有用的特性:
- 數(shù)據(jù)卷 可以在容器之間共享和重用
- 對 數(shù)據(jù)卷 的修改會立馬生效
- 對 數(shù)據(jù)卷 的更新,不會影響鏡像
- 數(shù)據(jù)卷 默認(rèn)會一直存在,即使容器被刪除
創(chuàng)建數(shù)據(jù)卷
docker volume create v1
查看所有數(shù)據(jù)卷
docker volume ls
查看數(shù)據(jù)卷信息
docker volume inspect v1
刪除一個(gè) volume
docker volume rm v1
數(shù)據(jù)卷 是被設(shè)計(jì)用來持久化數(shù)據(jù)的,它的生命周期獨(dú)立于容器, Docker 不會在容器被刪除后自動
刪除數(shù)據(jù)卷,并且也不存在垃圾回收這樣的機(jī)制來處理沒有任何容器引用的數(shù)據(jù)卷,無主的數(shù)據(jù)卷
可能會占據(jù)很多空間,所以要及時(shí)刪除 .
掛載數(shù)據(jù)卷
在用 docker run 命令的時(shí)候,使用 -- mount 標(biāo)記來將 數(shù)據(jù)卷 掛載到容器里。在一次 docker
run 中可以掛載多個(gè) 數(shù)據(jù)卷 。
docker run -itd \ --name 容器名字 \ --mount source=數(shù)據(jù)卷名稱,target=容器中的對應(yīng)目錄 \ 鏡像名稱
實(shí)際例子
docker run -it \ --name c1 \ --mount source=v1,target=/testdir \ centos
最好是通過 run 而非 create/start 創(chuàng)建啟動容器, create/start 命令創(chuàng)建啟動容器后,再掛載數(shù)據(jù)卷
相當(dāng)麻煩,要修改很多配置文件,但并非不可以
加了“\”意為將最后的回車換行給注釋了,系統(tǒng)理解為命令還沒有結(jié)束,因而是繼續(xù)等待用戶進(jìn)行
輸入,直到讀到結(jié)束符,如回車
如果數(shù)據(jù)卷不存在,docker會自動創(chuàng)建
如果容器上目錄不存在, docker會自動創(chuàng)建
查看數(shù)據(jù)卷的具體信息
docker inspect name docker inspect v1
虛擬機(jī)端口映射
通過虛擬機(jī)端口映射可在虛擬機(jī)中運(yùn)行tomcat,在本機(jī)訪問tomcat端口
docker run -itd \ --name t1 \ -p 8080:8080 \ --mount source=v1,target=/usr/local/tomcat/webapps \ tomcat:8.5.20 虛擬機(jī)要開放端口 firewall-cmd --zone=public --add-port=8080/tcp
掛載目錄(Bind mounts)
soft直接將webapps替換了
-v 可以掛載目錄
-v 還可以單獨(dú)掛載文件
掛載目錄
掛載一個(gè)目錄也是文件夾,先創(chuàng)建一個(gè)soft目錄,mkidr soft
docker run -itd \ --name t1 \ -v /soft/usr/local/tomcat/webapps/oapro.war \ -p 8080:8080 \ tomcat:8.5.20
掛載文件
docker run -itd \ --name t1 \ -v /soft/oapro.war:/usr/local/tomcat/webapps/oapro.war \ -p 8080:8080 \ tomcat:8.5.20
想實(shí)現(xiàn)遠(yuǎn)程登錄到容器內(nèi)部的tomcat
實(shí)現(xiàn)在線部署項(xiàng)目
需要放入tomcat的用戶信息 tomcat-user.xml 文件中
還要允許外部訪問 webapps/manager/META-INF/context.xml
需要提前vi編輯tomcat-users.xml 文件,編輯用戶信息admin;
刪除context.xml 文件中的部分內(nèi)容
部署在線項(xiàng)目
docker run -itd \ --name t1 \ -v /soft/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml \ -v /soft/context.xml:/usr/local/tomcat/webapps/manager/META-INF/context.xml \ -p 8080:8080 \ tomcat:8.5.20
注:mysql nginx的配置文件都要通過掛載的形式
二者區(qū)別
數(shù)據(jù)卷掛載適合多個(gè)容器共享數(shù)據(jù),而目錄掛載適合單個(gè)容器與主機(jī)之間進(jìn)行數(shù)據(jù)交換。
(1)注意二者寫法上的區(qū)別,例如在實(shí)例化MySQL容器時(shí)掛載寫法
- -v mysql:/val/lib/mysql 會識別為一個(gè)數(shù)據(jù)卷叫mysql
- -v ./mysql:/val/lib/mysql 會識別為當(dāng)前目錄下的mysql目錄
(2)當(dāng)實(shí)例化容器時(shí),應(yīng)查閱官方鏡像文檔,是否需要配置目錄映射
到此這篇關(guān)于Docker數(shù)據(jù)卷和掛載目錄的使用的文章就介紹到這了,更多相關(guān)Docker數(shù)據(jù)卷和掛載目錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker搭建持續(xù)集成平臺Jenkins的最簡教程分享
Jenkins 是一個(gè)廣泛使用的開源持續(xù)集成工具,它能夠自動化構(gòu)建、測試和部署軟件項(xiàng)目,本文我們將使用 Docker 搭建一個(gè)基于 Jenkins 的持續(xù)集成平臺,感興趣的可以了解下2024-03-03如何使用docker compose 部署ELK 8.X及監(jiān)控
這篇文章主要介紹了如何使用docker compose 部署ELK 8.X及監(jiān)控,包括前置環(huán)境配置及docker compose啟動/停止的命令,感興趣的朋友跟隨小編一起看看吧2023-10-10解決docker?pull出現(xiàn)錯(cuò)誤:Error?response?from?daemon
這篇文章主要給大家介紹了關(guān)于解決docker?pull出現(xiàn)錯(cuò)誤:Error?response?from?daemon的相關(guān)資料,這個(gè)錯(cuò)誤提示一般是因?yàn)槟銢]有權(quán)限拉取對應(yīng)的鏡像,文中將解決辦法介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12阿里云esc服務(wù)器Docker部署單節(jié)點(diǎn)Mysql的講解
今天小編就為大家分享一篇關(guān)于阿里云esc服務(wù)器Docker部署單節(jié)點(diǎn)Mysql的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03Docker綁定端口后仍無法遠(yuǎn)程直接訪問的解決方法
在Docker中,如果容器的端口綁定錯(cuò)誤或只綁定到了容器的內(nèi)部IP地址,將導(dǎo)致外部主機(jī)無法訪問該端口,所以本文小編給大家介紹了Docker綁定端口后仍無法遠(yuǎn)程直接訪問的解決方法,需要的朋友可以參考下2024-09-09docker start啟動容器后仍然exit狀態(tài)的解決
這篇文章主要介紹了docker start啟動容器后仍然exit狀態(tài)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06docker搭建dnsmasq服務(wù)的實(shí)現(xiàn)
本文將指導(dǎo)讀者如何使用Docker搭建DNSmasq服務(wù),通過簡單的步驟和詳細(xì)的說明,幫助讀者快速在Docker環(huán)境中部署DNSmasq,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01