??The Begin??點(diǎn)點(diǎn)關(guān)注,收藏不迷路??
|
一、前言
在Docker中,容器數(shù)據(jù)卷是一個(gè)非常有用的功能,它可以用于實(shí)現(xiàn)容器與主機(jī)之間的數(shù)據(jù)共享和持久化存儲(chǔ)。
容器數(shù)據(jù)卷的概念:
容器數(shù)據(jù)卷是Docker中用于實(shí)現(xiàn)數(shù)據(jù)持久化的一種機(jī)制。
它可以將容器內(nèi)部的數(shù)據(jù)目錄或文件與主機(jī)上的目錄或文件進(jìn)行映射,從而實(shí)現(xiàn)數(shù)據(jù)在容器和主機(jī)之間的共享和持久化存儲(chǔ)。
二、容器數(shù)據(jù)卷的作用
1、數(shù)據(jù)共享:
容器數(shù)據(jù)卷可以讓多個(gè)容器之間共享數(shù)據(jù)。比如,一個(gè)Web應(yīng)用程序可能需要一個(gè)容器負(fù)責(zé)前端頁(yè)面的展示,另一個(gè)容器負(fù)責(zé)處理后端邏輯,它們可以通過(guò)容器數(shù)據(jù)卷共享數(shù)據(jù)。
2、數(shù)據(jù)持久化:
容器數(shù)據(jù)卷可以實(shí)現(xiàn)數(shù)據(jù)在容器銷(xiāo)毀或重新創(chuàng)建時(shí)的持久化存儲(chǔ)。通常情況下,容器內(nèi)部的數(shù)據(jù)在容器銷(xiāo)毀后會(huì)丟失,而通過(guò)容器數(shù)據(jù)卷,我們可以將數(shù)據(jù)存儲(chǔ)在主機(jī)上,從而保證數(shù)據(jù)的持久性。
3、數(shù)據(jù)備份和恢復(fù):
容器數(shù)據(jù)卷可以用于數(shù)據(jù)的備份和恢復(fù)。我們可以將容器數(shù)據(jù)卷中的數(shù)據(jù)備份到主機(jī)上,以便在需要時(shí)進(jìn)行恢復(fù)。
三、容器數(shù)據(jù)卷的使用方法
1、在運(yùn)行 Docker 容器時(shí),將宿主機(jī)上的一個(gè)目錄(使用絕對(duì)路徑表示)映射到容器內(nèi)的指定目錄中。以實(shí)現(xiàn)數(shù)據(jù)在宿主機(jī)和容器之間的共享和持久化存儲(chǔ)。
具體命令如下:
docker run -it -v /宿主機(jī)絕對(duì)路徑:/容器內(nèi)目錄 鏡像名
##其中,-it 表示以交互模式啟動(dòng)容器,-v /宿主機(jī)絕對(duì)路徑:/容器內(nèi)目錄指定了數(shù)據(jù)卷的映射關(guān)系,鏡像名表示要基于哪個(gè)鏡像運(yùn)行容器。
四、實(shí)戰(zhàn)–使用docker部署前端項(xiàng)目(數(shù)據(jù)卷掛載)
運(yùn)行一個(gè) nginx 容器并將宿主機(jī)上的一個(gè)目錄映射到容器內(nèi)的指定目錄中,讓 nginx 使用自定義的配置文件來(lái)啟動(dòng)服務(wù)。**
4.1 重要:準(zhǔn)備工作,先在本地創(chuàng)建掛載目錄
mkdir /mynginx/conf
mkdir /mynginx/zyl-web
mkdir /mynginx/logs
如果沒(méi)有先在本地創(chuàng)建有關(guān)文件,會(huì)啟動(dòng)報(bào)錯(cuò)如下:
如下:容器 mynginx 已經(jīng)成功創(chuàng)建并運(yùn)行,但是在 45 秒前已經(jīng)退出。容器狀態(tài)顯示為 Exited (1)
報(bào)錯(cuò)1:2024/03/12 11:58:54 [emerg] 1#1: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)
報(bào)錯(cuò)2:2024/03/12 12:08:13 [emerg] 1#1: open() "/etc/nginx/mime.types" failed (2: No such file or directory) in /etc/nginx/nginx.conf:18
4.2 啟動(dòng)一個(gè)臨時(shí)的nginx容器,拷貝nginx容器內(nèi)的初始配置文件
先啟動(dòng)一個(gè)臨時(shí)的 nginx 容器,然后將容器內(nèi)的初始配置文件拷貝到本地宿主機(jī)。
1、啟動(dòng)臨時(shí)的 nginx 容器:
docker run -d --name=tmp-nginx -p 8000:80 nginx
docker ps
2、進(jìn)入nginx容器
docker exec -it tmp-nginx /bin/bash
3、拷貝 nginx 配置文件到本地宿主機(jī):
把tmp-nginx容器中/etc/nginx/目錄下的文件(不包括該目錄本身)復(fù)制到本地文件系統(tǒng)的/mynginx/conf/目錄中。
docker cp tmp-nginx:/etc/nginx/. /mynginx/conf/
3、停止并刪除臨時(shí)的 nginx 容器:
docker stop tmp-nginx
docker rm tmp-nginx
4.3 重新掛載目錄
需要多次使用 -v 參數(shù)來(lái)實(shí)現(xiàn)將多個(gè)目錄或文件掛載到容器內(nèi)。
將本地的 zyl-web/dist 目錄掛載到容器內(nèi)的 /usr/share/nginx/html 目錄,conf 目錄掛載到容器內(nèi)的 /etc/nginx 目錄,logs 目錄掛載到容器內(nèi)的 /var/log/nginx 目錄。
##重新掛載
docker run -d -p 8000:80 \
-v /mynginx/zyl-web/dist/:/usr/share/nginx/html \
-v /mynginx/conf:/etc/nginx \
-v /mynginx/logs:/var/log/nginx \
--name=mynginx nginx
4.4 修改宿主機(jī)nginx的配置文件
vi nginx.conf
內(nèi)容如下:
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
# 前端項(xiàng)目地址,注意:這里是容器內(nèi)部的地址
root /usr/share/nginx/html;
# 默認(rèn)訪問(wèn)的資源
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
4.5 拷貝前端項(xiàng)目到掛載目錄
## 根據(jù)你項(xiàng)目而定
mv /zyl-web/* /mynginx/zyl-web/
4.6 重啟nginx容器,加載配置
重新啟動(dòng)后,容器會(huì)繼續(xù)使用之前加載的配置文件、數(shù)據(jù)和設(shè)置。
docker restart mynginx
2、進(jìn)入mynginx容器,你會(huì)看到數(shù)據(jù)同步
docker exec -it mynginx /bin/bash
cd /usr/share/nginx/html/
測(cè)試訪問(wèn)前端web項(xiàng)目:
這樣發(fā)布前端項(xiàng)目、修改配置即可不用進(jìn)到容器內(nèi)部,而是在本地宿主機(jī)修改即可。
五、容器數(shù)據(jù)卷具名掛載、匿名掛載
5.1 具名掛載(Named Volumes)
具名掛載是通過(guò)為容器指定一個(gè)特定的卷(Volume)來(lái)實(shí)現(xiàn)的。
具名掛載可以為卷指定一個(gè)名稱(chēng),并且可以在容器創(chuàng)建時(shí)或后續(xù)運(yùn)行時(shí)進(jìn)行管理。
具名掛載的優(yōu)點(diǎn)是可以方便地管理和共享數(shù)據(jù),同時(shí)也支持在多個(gè)容器之間共享數(shù)據(jù)。
具名掛載在容器的生命周期內(nèi)保留數(shù)據(jù),即使容器被刪除,數(shù)據(jù)仍然存在。
例1:驗(yàn)證具名掛載,即使容器被刪除,數(shù)據(jù)仍然存在。
1、創(chuàng)建具名掛載卷并運(yùn)行容器
通過(guò) -v 卷名:容器內(nèi)路徑
docker run -d -P --name=nginx01 -v juming-nginx:/etc/nginx nginx
2、檢查名為 juming-nginx 的 Docker 卷的詳細(xì)信息
##將返回有關(guān)指定卷的元數(shù)據(jù)和配置信息。
docker volume inspect juming-nginx
3、查看具名卷的數(shù)據(jù)目錄
docker 在沒(méi)有指定目錄的情況下,容器內(nèi)的卷都在’/var/lib/docker/volumes/卷名/_data
/var/lib/docker/volumes/
是Docker 用于存儲(chǔ)具名卷數(shù)據(jù)的默認(rèn)路徑。在這個(gè)路徑下,Docker 會(huì)為每個(gè)具名卷創(chuàng)建一個(gè)單獨(dú)的目錄,并在其中保存卷的數(shù)據(jù)。
[root@zyl-server ~]# find / -name juming-nginx
/var/lib/docker/volumes/juming-nginx
在這個(gè)目錄下,能夠找到與 juming-nginx 具名卷相關(guān)聯(lián)的數(shù)據(jù)目錄。
即使容器被刪除,這些數(shù)據(jù)目錄仍然存在,說(shuō)明數(shù)據(jù)得到了持久化存儲(chǔ)。
4、進(jìn)入容器內(nèi)部,創(chuàng)建文件
docker exec -it nginx01 /bin/bash
touch test-juming.txt
5、驗(yàn)證刪除前面創(chuàng)建的nginx01 容器,數(shù)據(jù)是否持久化存儲(chǔ)
docker stop nginx01
docker rm nginx01
可以看到數(shù)據(jù)仍然存在,則說(shuō)明具名掛載的數(shù)據(jù)是持久化的,即使容器被刪除也不會(huì)丟失。
5.2 匿名掛載(Anonymous Volumes)
匿名掛載是在容器創(chuàng)建時(shí)自動(dòng)創(chuàng)建的臨時(shí)卷,沒(méi)有指定一個(gè)特定的名稱(chēng)。匿名掛載的優(yōu)點(diǎn)是可以快速創(chuàng)建和銷(xiāo)毀臨時(shí)數(shù)據(jù),適用于臨時(shí)存儲(chǔ)或臨時(shí)共享數(shù)據(jù)的場(chǎng)景。
匿名掛載在容器刪除后會(huì)自動(dòng)銷(xiāo)毀,數(shù)據(jù)不會(huì)保留。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-839647.html
5.3 如何確定是具名掛載還是匿名掛載
-v 容器內(nèi)路徑 ##匿名掛載
-v 卷名:容器內(nèi)路徑 ###具名掛載
-v /宿主機(jī)路徑:容器內(nèi)路徑 ##指定路徑掛載
5.4 拓展:讀寫(xiě)規(guī)則映射添加
docker run -it --privileged=true -v /宿主機(jī)絕對(duì)路徑:/容器內(nèi)目錄:ro(只讀,默認(rèn)可讀可寫(xiě)) 鏡像名
ro ##只讀,如果有ro則說(shuō)明只能通過(guò)宿主機(jī)來(lái)操作,容器內(nèi)無(wú)法操作
rw ##可讀可寫(xiě)
六、命令總結(jié)
docker run -d 鏡像名 ##重啟之后不會(huì)自動(dòng)運(yùn)行
docker run -d --restart=always 鏡像名 ##重啟之后自動(dòng)運(yùn)行容器
docker start 容器id/容器名 ##啟動(dòng)
docker restart 容器id/容器名 ##重啟
docker stop 容器id/容器名 ##停止
docker kill 容器id/容器名 ##kill進(jìn)程
docker ps ###列出當(dāng)前運(yùn)行的容器
docker ps | grep 容器id/容器名 ## 查看進(jìn)程是否正常
docker ps -a ###列出所有容器
docker exec -it 容器id/容器名 /bin/bash ##進(jìn)入容器
docker logs 容器id/容器名 ###看容器的日志
docker cp 容器id/容器名:/容器內(nèi)文件路徑 宿主機(jī)文件絕對(duì)路徑 ##從容器復(fù)制文件到本地文件系統(tǒng)
docker cp 宿主機(jī)文件絕對(duì)路徑 容器id/容器名:容器內(nèi)文件路徑 ##從本地文件系統(tǒng)復(fù)制文件到容器內(nèi)
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-839647.html
??The End??點(diǎn)點(diǎn)關(guān)注,收藏不迷路??
|
到了這里,關(guān)于Docker進(jìn)階:深入了解容器數(shù)據(jù)卷的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!