? ? ? ? ? ????????????????????????????歡迎來到我的CSDN主頁!????
? ? ? ? ? ? ? ? ? ? ? ? ??我是平頂山大師,一個在CSDN分享筆記的博主。????
? ? ? ? ??推薦給大家我的博客專欄《【Docker】在容器中管理數(shù)據(jù)》。????
? ? ? ? ? ? ? ? ? ? ? ? ??如果感覺還不錯的話請給我關(guān)注加三連吧!????
docker在容器中管理數(shù)據(jù)主要有兩種方式:
1- 數(shù)據(jù)卷(Volumes)
2- 掛載主機目錄(Bind mounts)
一,數(shù)據(jù)卷
1.1數(shù)據(jù)卷作用:
作用:為了很好的實現(xiàn)數(shù)據(jù)保存和數(shù)據(jù)共享,以正常的文件或者目錄的形式存在于宿主機上。又被稱作數(shù)據(jù)卷。
掛載數(shù)據(jù)卷的好處在于:它使得Docker容器與主機之間可以共享數(shù)據(jù),并且在容器刪除后,數(shù)據(jù)仍然存在于主機上。這樣,即使容器被刪除或重新創(chuàng)建,數(shù)據(jù)也不會丟失。(安全性高)另外,通過掛載數(shù)據(jù)卷,我們還可以在多個容器之間共享數(shù)據(jù),這對于搭建基于微服務(wù)架構(gòu)的應(yīng)用非常有用。同時,數(shù)據(jù)卷還支持讀寫分離、只讀和權(quán)限設(shè)置等功能,使得數(shù)據(jù)在容器內(nèi)外的訪問更加靈活和安全。(方便不同數(shù)據(jù)中的操作,因為容器中的文件,數(shù)據(jù)是操作不了的,只能在容器建立之前進行增刪改)
1.2使用數(shù)據(jù)卷(命令)
都是增刪改查的操作可以使用 容器+數(shù)據(jù)卷+create,ls,inspect,rm的記憶方法來記憶?
????????創(chuàng)建數(shù)據(jù)卷
docker volume create 數(shù)據(jù)卷名稱
????????查看所有數(shù)據(jù)卷
docker volume ls
????????查看數(shù)據(jù)卷信息
docker volume inspect 數(shù)據(jù)卷名稱
????????刪除一個volume
docker volume rm 數(shù)據(jù)卷名稱
? ? ? ? 注意:數(shù)據(jù)卷 是被設(shè)計用來持久化數(shù)據(jù)的,它的生命周期獨立于容器,Docker不會在容器被刪除后自動 刪除數(shù)據(jù)卷,并且也不存在垃圾回收這樣的機制來處理沒有任何容器引用的數(shù)據(jù)卷,無主的數(shù)據(jù)卷 可能會占據(jù)很多空間,所以要及時刪除.
?掛載數(shù)據(jù)卷
在用 docker run 命令的時候,使用 --mount 標記來將 數(shù)據(jù)卷 掛載到容器里。在一次 docker run 中可以掛載多個數(shù)據(jù)卷 。如果容器,數(shù)據(jù)卷中沒有對應(yīng)的文件文件夾會自動創(chuàng)建。
docker run -itd \ --name 容器名字 \ --mount source=數(shù)據(jù)卷名稱,target=容器中的對應(yīng)目錄 \ 鏡像名稱
查看是否掛載成功
首先查看我們數(shù)據(jù)卷的目錄位置
docker inspect name
備注:
docker run -it ?--name c1 --mount source=t1,target=/test1 \ centos
c1容器中又建立了test1文件夾touch c1.txt? ? ? ?--建立文件
cd? ? ? ? ? ? ? ? ? ? ? --進入目錄
二,掛載主機目錄
2.1什么是目錄掛載?
目錄掛載是將主機上的一個目錄直接掛載到容器中,容器中的文件會直接覆蓋主機上的文件,這種方式不適合多個容器共享數(shù)據(jù)。目錄掛載的好處是可以方便地將主機上的文件或目錄與容器中的文件或目錄進行同步,方便開發(fā)和調(diào)試。
2.目錄掛載的基本使用
在宿主機上創(chuàng)建一個目錄用于存放資源
docker run -itd \ --name 容器名字 \ --mount type=bind,source=宿主機目錄,target=容器中的對應(yīng)目錄 \ 鏡像名稱
docker run -itd \? ? ? ? --運行一個新的容器且后臺運行模式
--name t1 \? ? ? ? ? ? ? ? --起名字
-p 8080:8080 \? ? ? ? ? ?--將容器內(nèi)的端口 8080 映射到宿主機的端口 8080等于訪問外部8080就是訪問到容器中8080-v /soft:/user/local/tomcat/webapps \? ? ? ?--將本地宿主機上的目錄?
/soft
?掛載到容器內(nèi)tomcat:8.5.20? ? ? ? ? ? --指定tomcat鏡像版本啟動容器,建議一樣不然可能會報錯
訪問不到就嘗試在防火墻上開端口
開放端口
firewall-cmd --zone=public --add-port=8080/tcp????????sudo firewall-cmd --list-ports? ? ? ? --查看已經(jīng)開放的端口
firewall-cmd reload? ? ? ? --刷新防火墻
?但是這么它是將整個文件夾進行替換?。。?!就相當(dāng)于把其他內(nèi)置的文件給覆蓋了
方法一:
輸入命令 :?
docker run -itd ?\
--name t1 ?\
-p ?8080:8080 ? \
-v ?/soft:/usr/local/tomcat/webapps ?\
tomcat:8.5.20
三,針對目錄掛載進行優(yōu)化以及部署一個war包
方法二:
步驟:
3.1在虛擬機跟目錄下創(chuàng)建一個文件夾:mkdir soft?
在文件夾中指定文件掛載,并且指定掛載后的文件名稱,輸入命令 :
docker run -itd ?\
--name t1 ?\
-p ?8080:8080 ? \
-v ?/soft/oapro.war:/usr/local/tomcat/webapps/oapro.war ?\
tomcat:8.5.20
3.2修改tomcat的兩個文件:
修改:1
找到最后面:
<role rolename="manager-gui"/>
<user username="tomcat" password="123456" roles="manager-gui"/>?
修改:2
3放入war包
輸入命令:
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
這里出現(xiàn)一個錯誤:
docker: Error response from daemon: Conflict. The container name "/t1" is already in use by container "ffe7c2c9a7d88a06ff425256a7fe6f336745b9888b0a46e56dbc7218dc723936". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.
?
原因是:已經(jīng)有一個docker在運行這里要刪掉:
docker stop ffe7c2c9a7d8
?docker rm ffe7c2c9a7d8
?
認真寫博客的人,見一個少一個??????????????????
????????????? 點贊支持,?? 收藏學(xué)習(xí),?? 關(guān)注不迷路~
?????????????????? ??????????? 如有錯漏請不吝指正~文章來源:http://www.zghlxwxcb.cn/news/detail-794900.html? ? ? ? ? ? ? ? ? ? ? ? ? ? ??平頂山大師-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-794900.html
到了這里,關(guān)于【Docker】在容器中管理數(shù)據(jù)&&數(shù)據(jù)卷掛載以及宿主機目錄掛載的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!