前言

一.?數(shù)據(jù)卷介紹
Docker 中的數(shù)據(jù)卷(Volume)是用于持久化存儲(chǔ)容器數(shù)據(jù)的一種機(jī)制。它可以將主機(jī)上的目錄或文件與容器內(nèi)的目錄或文件進(jìn)行關(guān)聯(lián),從而實(shí)現(xiàn)數(shù)據(jù)的共享和持久化。
使用數(shù)據(jù)卷可以實(shí)現(xiàn)以下幾個(gè)方面的優(yōu)勢(shì):
-
數(shù)據(jù)持久化:容器運(yùn)行期間,數(shù)據(jù)卷中的數(shù)據(jù)可以被保留下來,即使容器被刪除或重新創(chuàng)建,數(shù)據(jù)仍然可以被訪問到。
-
數(shù)據(jù)共享:多個(gè)容器可以共享同一個(gè)數(shù)據(jù)卷,從而實(shí)現(xiàn)容器之間的數(shù)據(jù)共享。
-
數(shù)據(jù)備份與恢復(fù):可以通過備份數(shù)據(jù)卷來實(shí)現(xiàn)容器數(shù)據(jù)的備份,然后在需要的時(shí)候恢復(fù)到其他容器中。
-
高性能訪問:數(shù)據(jù)卷通常會(huì)比容器內(nèi)部的文件系統(tǒng)性能更好,特別是對(duì)于大量讀寫操作的場(chǎng)景。
二.?數(shù)據(jù)卷掛載
1.數(shù)據(jù)卷操作
docker volume create v1? (v1為數(shù)據(jù)卷的名稱)
?1.1查看數(shù)據(jù)卷
docker volume ls
1.2 刪除數(shù)據(jù)卷
docker volume rm v1(數(shù)據(jù)卷名稱)
?1.3?查看所有數(shù)據(jù)卷
docker volume ls
1.4 查看數(shù)據(jù)卷信息
docker volume inspect v1(數(shù)據(jù)卷名稱)
?1.5 docker容器掛載數(shù)據(jù)卷
docker run -it \
--name c1 \
--mount source=v1,target=/testdir \
centos
注:c1為容器名字,v1為掛載的數(shù)據(jù)卷,target=/***是指在創(chuàng)建時(shí)指定創(chuàng)建一個(gè)名為***的目錄,在我們?yōu)槟硞€(gè)容器掛載數(shù)據(jù)卷時(shí)只有在容器創(chuàng)建時(shí)才能為它進(jìn)行掛載,當(dāng)前命令指創(chuàng)建一個(gè)名為c1的容器并為它指定的數(shù)據(jù)卷為v1,掛載的目錄為testdir(當(dāng)前名字可以任意,在創(chuàng)建容器時(shí)會(huì)自動(dòng)創(chuàng)建該目錄)
4.數(shù)據(jù)卷共享
當(dāng)我們?cè)谶M(jìn)行掛載數(shù)據(jù)卷時(shí),可以不同容器指定同一數(shù)據(jù)卷,只需要將容器名更改即可,我們不管在哪個(gè)容器進(jìn)行操作,都會(huì)同時(shí)共享一個(gè)數(shù)據(jù)卷?
小結(jié)
容器和數(shù)據(jù)卷是兩個(gè)獨(dú)立的不同的模塊,當(dāng)我們操作容器時(shí),例如刪除,不會(huì)影響數(shù)據(jù)卷,數(shù)據(jù)卷依然存在,當(dāng)我們下次創(chuàng)建數(shù)據(jù)卷時(shí)依然可以掛載
小實(shí)戰(zhàn)(將war包掛載到數(shù)據(jù)卷中并運(yùn)行在Tomcat)?
1.找到數(shù)據(jù)卷路徑
查看所有數(shù)據(jù)卷
docker volume ls
查看指定數(shù)據(jù)卷信息(v1為數(shù)據(jù)卷名稱)
docker inspect v1
2.cd 進(jìn)入當(dāng)前目錄
將提前準(zhǔn)備好的測(cè)試war包拖到當(dāng)前目錄下
?3.創(chuàng)建容器將war包掛載到當(dāng)前容器中
docker run -itd \
--name t1 \
-p 8080:8080 \
--mount source=v1,target=/usr/local/tomcat/webapps \
tomcat:8.5.20
注意:當(dāng)前命令是將我們的數(shù)據(jù)卷目錄替換掉當(dāng)前目錄/usr/local/tomcat/webapps,也就是將當(dāng)前目錄中的文件全部替換成數(shù)據(jù)卷目錄文件使它們數(shù)據(jù)保持一致
這里我們可以回到自己的windows,在瀏覽器中利用IP/項(xiàng)目名?進(jìn)行訪問
訪問成功后說明項(xiàng)目成功掛載到數(shù)據(jù)卷中并運(yùn)行成功
三.目錄掛載
1.創(chuàng)建目錄
創(chuàng)建目錄并進(jìn)入
mkdir soft
cd soft
2.創(chuàng)建容器并掛載當(dāng)前目錄
docker run -itd \
--name t1 \
-v /soft/oapro.war:/usr/local/tomcat/webapps/oapro.war \
-p 8080:8080 \
tomcat:8.5.20
在上面的命令中soft將webapps直接替換了,等于進(jìn)行了一個(gè)重新命名,-v 既可以掛載目錄
-v 還可以單獨(dú)掛載文件
?四.Tomcat在線部署
實(shí)現(xiàn)思路:通過將修改好的配置文件掛載到目錄中,然后通過當(dāng)前的用戶名密碼進(jìn)入到當(dāng)前系統(tǒng)中的Tomcat實(shí)現(xiàn)在線部署
1.將配置文件上傳到虛擬機(jī)中
在我們的本機(jī)Windows中的tomcat文件夾中找到conf/tomcat-users.xml文件(用戶信息文件),并將其上傳到剛剛虛擬機(jī)上創(chuàng)建的soft文件夾
示例:
?再將Tomcat中的webapps\manager\META-INF\context.xml進(jìn)行上傳
示例
2.修改配置文件
雙擊進(jìn)入tomcat-users.xml,我們?cè)诋?dāng)前文件位置加入以下代碼,修改完成后保存并退出
注意:下面的password那一欄需要修改為自己的密碼
<role rolename="manager-gui"/>
<user username="tomcat" password="自己的密碼" roles="manager-gui"/>
然后雙擊進(jìn)入到我們的context.xml文件,將下面示圖的部分進(jìn)行注釋(一般是沒有注釋的),修改完成后保存并退出
?3.將配置文件掛載到目錄中
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
注:tomcat-users.xml為自己的剛剛上傳的用戶信息文件的文件名,/usr/local/tomcat/conf/tomcat-users.xml為要替換的當(dāng)前虛擬機(jī)中Tomcat的tomcat-users.xml文件,context.xml同理
4.在線部署
進(jìn)入管理頁進(jìn)行在線部署
?登錄輸入自己的用戶名和密碼進(jìn)入(用戶名一般為tomcat)
登錄進(jìn)入后上傳war包即實(shí)現(xiàn)在線部署
報(bào)錯(cuò)解決
?1.Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/soft/tomcat-users.xml" to rootfs at "/usr/local/tomcat/conf/tomcat-users.xml": mount /soft/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml (via /proc/self/fd/7), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
Error: failed to start containers: t
原因:路徑參數(shù)不正確,檢查自己的文件路徑名,soft是否在根路徑
2.
docker: Error response from daemon: Conflict. The container name "/t1" is already in use by container "c7e532fc6407996f987f41f88ef2661dd054d9a74ad0b0effd728345680e8ef9". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.文章來源:http://www.zghlxwxcb.cn/news/detail-816758.html
原因:容器重復(fù),刪除之前的容器名相同的容器,或者創(chuàng)建時(shí)換一個(gè)名稱?文章來源地址http://www.zghlxwxcb.cn/news/detail-816758.html
到了這里,關(guān)于Docker進(jìn)階數(shù)據(jù)卷&目錄掛載及在線部署的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!