成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Docker數(shù)據(jù)持久化與數(shù)據(jù)共享

開(kāi)發(fā) 前端
上篇文章的最后我們使用Docker部署了一個(gè)純前端項(xiàng)目,但還有一個(gè)很重要的問(wèn)題就是容器中產(chǎn)生的數(shù)據(jù)(比如log文件),容器一旦被刪除,容器內(nèi)的所有數(shù)據(jù)也就沒(méi)有了,為了避免這個(gè)問(wèn)題我們可以將數(shù)據(jù)存儲(chǔ)到容器之外(比如宿主機(jī)),這樣即使刪除容器也不會(huì)丟失數(shù)據(jù)。

上篇文章的最后我們使用Docker部署了一個(gè)純前端項(xiàng)目,但還有一個(gè)很重要的問(wèn)題就是容器中產(chǎn)生的數(shù)據(jù)(比如log文件),容器一旦被刪除,容器內(nèi)的所有數(shù)據(jù)也就沒(méi)有了,為了避免這個(gè)問(wèn)題我們可以將數(shù)據(jù)存儲(chǔ)到容器之外(比如宿主機(jī)),這樣即使刪除容器也不會(huì)丟失數(shù)據(jù)。一旦容器故障,我們可以重新創(chuàng)建一個(gè)容器,將數(shù)據(jù)掛載到容器里,就可以快速恢復(fù)。

數(shù)據(jù)存儲(chǔ)方式

Docker提供了以下幾種存儲(chǔ)方式:

  • 「volume卷」:這種方式是在宿主機(jī)文件系統(tǒng)分配一塊專(zhuān)有存儲(chǔ)區(qū)域,由 Docker管理,并且與主機(jī)的核心功能隔離。非 Docker 進(jìn)程不能修改文件系統(tǒng)的這一部分。「卷是在 Docker 中持久保存數(shù)據(jù)的最佳方式」,它適合存儲(chǔ)數(shù)據(jù)庫(kù)數(shù)據(jù),可掛到多個(gè)容器上
  • 「bind mount 綁定掛載」:這種方式是直接把宿主機(jī)目錄映射到容器內(nèi),適合掛代碼目錄和配置文件,可掛到多個(gè)容器上
  • 「tmpfs mount臨時(shí)掛載」:這種方式僅存儲(chǔ)在主機(jī)系統(tǒng)的內(nèi)存中,并且永遠(yuǎn)不會(huì)寫(xiě)入主機(jī)系統(tǒng)的文件系統(tǒng),適合存儲(chǔ)臨時(shí)文件,不可多容器共享

這張圖很清晰的解釋了volume、bind mount、temps mount與容器和宿主機(jī)之間的關(guān)系,這三者最終都是存儲(chǔ)在宿主機(jī)上的。

重點(diǎn)了解volume數(shù)據(jù)卷:(其實(shí)綁定掛載也可以當(dāng)成volume來(lái)理解)

  • 數(shù)據(jù)卷其實(shí)是宿主機(jī)上的一個(gè)目錄
  • 當(dāng)容器目錄與數(shù)據(jù)卷目錄綁定之后,雙方的修改都會(huì)立即同步
  • 一個(gè)數(shù)據(jù)卷可以被多個(gè)容器掛載
  • 一個(gè)容器也可以掛載多個(gè)數(shù)據(jù)卷

「數(shù)據(jù)卷可以用來(lái)做容器數(shù)據(jù)持久化、外部機(jī)器與容器間接通信、容器之間間接通信」

數(shù)據(jù)卷操作

數(shù)據(jù)卷(Volume)也是常見(jiàn)的 Docker 對(duì)象類(lèi)型的一種,因此它也支持創(chuàng)建、查看、刪除等操作.

創(chuàng)建數(shù)據(jù)卷

使用docker volume create [name]指令來(lái)創(chuàng)建一個(gè)數(shù)據(jù)卷

docker volume create nanjiu-data

查看所有的數(shù)據(jù)卷

docker volume ls

查看卷信息

使用docker volume inspect [name]指令來(lái)查看對(duì)應(yīng)卷信息

docker volume inspect nanjiu-data

從上圖我們可以看到Mountpoint數(shù)據(jù)卷掛載的地址,需要注意的是「對(duì)于非 Linux 系統(tǒng)而言(Windows 、Mac ),該目錄不存在于你的文件系統(tǒng)中,而是存在于 Docker 虛擬機(jī)中。」

刪除數(shù)據(jù)卷

使用docker volume rm [name]指令來(lái)刪除對(duì)應(yīng)的數(shù)據(jù)卷

docker volume rm nanjiu-data

這里需要注意的是:

  • 「數(shù)據(jù)卷是用來(lái)做持久化數(shù)據(jù)的,它的生命周期獨(dú)立于容器,所以Docker不會(huì)在容器被刪除后自動(dòng)刪除數(shù)據(jù)卷,并且也不存在垃圾回收這樣的機(jī)制來(lái)處理沒(méi)有任何容器引用的 數(shù)據(jù)卷」
  • 「如果需要在刪除容器的同時(shí)移除數(shù)據(jù)卷,可以在刪除容器的時(shí)候使用 docker rm -v 指令」

如果想要清除所有無(wú)容器引用的數(shù)據(jù)卷,可以使用以下指令:

docker volume prune

與容器一起使用

數(shù)據(jù)卷本身是用來(lái)為容器做數(shù)據(jù)持久化的,所以單獨(dú)創(chuàng)建一個(gè)數(shù)據(jù)卷的意義并不大。

創(chuàng)建容器與數(shù)據(jù)卷

命名數(shù)據(jù)卷

可以使用docker run指定-v或-mount來(lái)創(chuàng)建數(shù)據(jù)卷,兩者產(chǎn)生的結(jié)果相同,最大的區(qū)別在于-v語(yǔ)法將所有選項(xiàng)組合在一個(gè)字段中,而--mount 語(yǔ)法則將它們分開(kāi)。

docker run -itd -v nanjiu-vol:/nanjiu-data --name nanjiu nginx:latest

這里通過(guò)-v指定了數(shù)據(jù)卷的名稱(chēng)為nanjiu-vol,并且對(duì)應(yīng)綁定容器中的路徑為/nanjiu-data對(duì)于容器中不存在的文件夾,Docker會(huì)幫我們自動(dòng)新建,所以我們可以進(jìn)入到容器中查看是否有該文件夾

這里我們可以看到容器中對(duì)應(yīng)的數(shù)據(jù)卷目錄

匿名數(shù)據(jù)卷

這里還有一種類(lèi)型叫做匿名數(shù)據(jù)卷,他的創(chuàng)建方式只需要省略數(shù)據(jù)卷名稱(chēng)就可以,然后Docker會(huì)為它生成一長(zhǎng)串的hash值作為數(shù)據(jù)卷的名稱(chēng)

docker run -itd -v /nanjiu-noname --name nanjiu-noname nginx:latest

驗(yàn)證數(shù)據(jù)持久化

我們先在這個(gè)數(shù)據(jù)卷目錄新建一個(gè)文件,再把當(dāng)前容器刪除

然后我們?cè)僦匦聞?chuàng)建一個(gè)容器并綁定上面那個(gè)數(shù)據(jù)卷,如果數(shù)據(jù)卷中的內(nèi)容還存在,那就能夠證明數(shù)據(jù)是持久化存儲(chǔ)的,不會(huì)隨著容器的刪除而刪除

「從這里我們就能夠驗(yàn)證數(shù)據(jù)卷可以用來(lái)做持久化存儲(chǔ)了」

綁定掛載

上面我們提到過(guò)它可以當(dāng)成數(shù)據(jù)卷來(lái)理解,因?yàn)樗谑褂眠^(guò)程中幾乎與數(shù)據(jù)卷類(lèi)似,不同的地方是它其實(shí)是與宿主機(jī)的文件系統(tǒng)進(jìn)行綁定

docker run -itd -v ~/Desktop/nanjiu-mount-data:/nanjiu-mount-data --name 
nanjiu nginx:latest

這里-v的格式為 :,對(duì)應(yīng)綁定的是宿主機(jī)目錄與容器目錄

然后可以到桌面看對(duì)應(yīng)的文件是否存在

「綁定掛載可以讓宿主機(jī)與容器共享數(shù)據(jù),并且同樣不會(huì)隨容器的刪除而刪除,也可以用來(lái)實(shí)現(xiàn)數(shù)據(jù)持久化,上面有提到他適合用來(lái)掛載代碼目錄和配置文件」

數(shù)據(jù)共享

容器與宿主機(jī)共享數(shù)據(jù)

綁定掛載

這個(gè)很好理解,上面那種bind mount綁定掛載方式就是最明確的,它是直接將宿主機(jī)上的目錄掛載到容器。

docker cp

volume數(shù)據(jù)卷的方式想要實(shí)現(xiàn)容器與宿主機(jī)共享數(shù)據(jù)稍微有點(diǎn)麻煩,因?yàn)椤高@種方式是在宿主機(jī)文件系統(tǒng)分配一塊專(zhuān)有存儲(chǔ)區(qū)域,由 Docker管理,并且與主機(jī)的核心功能隔離。非 Docker 進(jìn)程不能修改文件系統(tǒng)的這一部分」

但好在docker提供的docker cp命令可以用來(lái)拷貝文件,該docker cp命令可以將內(nèi)容從SRC_PATH復(fù)制到DEST_PATH. 您可以從容器的文件系統(tǒng)復(fù)制到本地計(jì)算機(jī),或者相反,從本地文件系統(tǒng)復(fù)制到容器。

docker cp 88eecfd2dd14:/nanjiu-data ~/Desktop/cpDir

然后查看本地桌面是否有了拷貝過(guò)來(lái)的內(nèi)容

通過(guò)這種方式也能實(shí)現(xiàn)宿主機(jī)與容器之間的數(shù)據(jù)共享,但它的缺點(diǎn)在于每次都需要手動(dòng)操作,數(shù)據(jù)共享比較麻煩。

容器與容器之間共享數(shù)據(jù)

綁定掛載

這里第一種方式仍然是可以使用bind mount綁定掛載,因?yàn)橥粋€(gè)文件可以掛載到多個(gè)容器,這樣就可以借助宿主機(jī)中轉(zhuǎn)來(lái)實(shí)現(xiàn)容器之間的數(shù)據(jù)共享了,這種方式比較簡(jiǎn)單易懂。

數(shù)據(jù)卷容器

數(shù)據(jù)卷容器是一個(gè)專(zhuān)門(mén)為其它容器提供卷的容器,它提供的卷可以是bind mount,也可以是docker volume「數(shù)據(jù)卷容器在為其它容器提供卷功能時(shí)可以不需要處于運(yùn)行狀態(tài)」

這里創(chuàng)建了兩種類(lèi)型的volume,同時(shí)掛載在nanjiu-vc這個(gè)數(shù)據(jù)卷容器上,這個(gè)容器可以不啟動(dòng)

docker create --name nanjiu-vc \ > -v ~/Desktop/nanjiu-vc:/nanjiu-vc \> 
-v nanjiu-vc:/nanjiu-vc2 \> nginx:latest

其他容器可以通過(guò)--volumes-from使用nannie-vc這個(gè)數(shù)據(jù)卷容器

這里建了兩個(gè)容器都使用nanjiu-vc這個(gè)數(shù)據(jù)卷容器

這樣兩個(gè)容器就通過(guò)數(shù)據(jù)卷容器實(shí)現(xiàn)了數(shù)據(jù)共享。

「這種方式的優(yōu)點(diǎn)在于:」

與bind mount相比,不必為每一個(gè)容器指定宿主機(jī)path,所有path都在volume container中定義好了,容器只需與volume container關(guān)聯(lián),實(shí)現(xiàn)了容器與host的解耦。

使用volume container的容器,其mount point是一致的,有利于配置的規(guī)范和標(biāo)準(zhǔn)化,但也帶來(lái)一定的局限,使用時(shí)需要綜合考慮。

改造之前的log存儲(chǔ)方式

之前的那種部署方式存在一個(gè)問(wèn)題,如果容器出現(xiàn)故障被銷(xiāo)毀,那么容器內(nèi)產(chǎn)生的log文件也就沒(méi)有了,現(xiàn)在我們可以把它改造成將nginx產(chǎn)生的log文件使用數(shù)據(jù)卷存儲(chǔ),當(dāng)容器出現(xiàn)故障,我們只需要重新創(chuàng)建一個(gè)容器并掛載數(shù)據(jù)就可以快速恢復(fù)log文件排查問(wèn)題

修改Dockerfile

# 指定node鏡像
FROM node:16-alpine as builder
# 指定工作目錄
WORKDIR /code
# 代碼復(fù)制到工作目錄
ADD . /code
# 安裝依賴(lài)
RUN npm install --registry=https://registry.npm.taobao.org
# 打包
RUN npm run build
# 指定nginx鏡像
FROM nginx:alpine
# 創(chuàng)建nginx日志目錄數(shù)據(jù)卷
VOLUME ["/var/log/nginx"]
# 復(fù)制打包后的代碼到nginx容器中
COPY --from=builder /code/dist /usr/share/nginx/html
COPY /nginx.conf /etc/nginx/nginx.conf
# 暴露端口
EXPOSE 8080

重新打包鏡像

docker build -t nanjiu:1.0.1 .

創(chuàng)建容器

基于上面nanjiu:1.0.1鏡像創(chuàng)建一個(gè)容器nanjiu-web3docker run -d -p 9099:8080 --name nanjiu-web3 nanjiu:1.0.1

訪問(wèn)頁(yè)面

這里主要是為了產(chǎn)生nginx日志文件

將容器刪除

docker stop 4355deda547f # 停止容器
docker rm 4355deda547f # 刪除容器

容器雖然被刪除了,但數(shù)據(jù)卷并不會(huì)跟隨容器的刪除而刪除

新建容器綁定數(shù)據(jù)卷查看數(shù)據(jù)

docker run -d \
-v 3690f4f3b2d15466a9dfa7f692cba06add99daba3f76b8e7ffdc99b1c5937a8a:/nginx-data \
--name nanjiu-web4 nginx:latest

這樣一來(lái)即使容器出現(xiàn)故障被刪除,也不影響查看log文件排查問(wèn)題。

責(zé)任編輯:華軒 來(lái)源: 前段南玖
相關(guān)推薦

2021-03-18 08:18:15

ZooKeeper數(shù)據(jù)持久化

2024-09-29 09:25:53

2018-12-14 09:48:23

Redis數(shù)據(jù)故障

2011-07-07 15:45:45

iPhone SQLite 數(shù)據(jù)

2024-04-25 16:17:53

SentinelNacos數(shù)據(jù)源

2011-08-25 14:26:40

LUA數(shù)據(jù)文件

2024-03-26 00:03:08

Redis數(shù)據(jù)RDB

2017-09-21 08:16:33

數(shù)據(jù)存儲(chǔ)環(huán)境

2011-08-17 15:19:38

iPhone應(yīng)用數(shù)據(jù)

2019-09-05 09:15:50

數(shù)據(jù)容器Docker

2011-06-07 17:16:47

iPhone 數(shù)據(jù)

2022-08-30 10:15:27

Kubernetes數(shù)據(jù)持久化管理

2024-12-27 09:32:25

MyBatis代碼

2023-11-26 09:06:46

2023-08-21 15:16:03

數(shù)據(jù)隱私安全

2021-07-18 07:59:42

RedisRDBAOF

2019-05-15 09:44:33

數(shù)據(jù)Redis持久化

2023-12-29 08:19:52

應(yīng)用程序開(kāi)發(fā)者數(shù)據(jù)庫(kù)

2013-07-30 15:34:37

數(shù)據(jù)中心

2019-05-15 09:04:47

Redis數(shù)據(jù)存儲(chǔ)數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 在线播放国产一区二区三区 | 精品国产一二三区 | 超碰人人人 | 成人国产免费视频 | 久久久久久黄 | 日韩精品在线一区 | 美女黄色在线观看 | 欧美一区二区三区在线观看 | 欧美一级视频免费看 | 奇米影视在线 | 91国在线 | 久久av在线播放 | 亚洲福利在线观看 | 色综合成人网 | 欧美一二三 | 男人天堂色 | 成人黄色在线视频 | 中文字幕国产一区 | 一级黄色录像毛片 | 中日字幕大片在线播放 | 成人免费xxxxx在线视频 | 九九综合九九 | 在线 丝袜 欧美 日韩 制服 | 亚洲中国字幕 | 日韩精品在线看 | 亚洲精品99| 久久久精彩视频 | 精品一二区 | 午夜国产一级 | 国产免费视频 | 国产精品久久视频 | 中文字幕一区二区三区四区五区 | 亚洲国产成人在线视频 | 日本中文字幕在线视频 | 欧美国产精品 | 91视频在线| av在线免费不卡 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 天天影视综合 | 国产精品3区 | 欧美日韩黄色一级片 |