動手學Docker 第四彈 Docker持久化儲存

2021-10-04 12:16:54 字數 2069 閱讀 3659

完整專案請檢視github:鏈結

知道現在我們所有操作都是基於容器的,也就是我們的所有資料的生命週期是和容器一樣的,如果容器被刪除了,那麼我們的所有資料也就沒有了,這肯定不是我們想要看到的,我們想要一些資料儘管容器不存在了,但仍然可以儲存,所以就需要docker的持久化技術。

目前docker可以通過兩種方式實現持久化:

基於本地檔案系統的volume有兩種建立方式:

接下來我們以redis為例:

我們先看一下redis的dockerfile,在其中它指定了對應的volume

之後我們在伺服器上建立乙個redis容器

docker run -d --name redis redis
接下來我們使用命令檢視一下容器中的volume

docker volume ls
可以看到通過建立redis映象已經為我們自動建立了乙個volume

我們也可以使用inspect來檢視一下vloume的具體細節(後面記得修改為自己的volume name)

docker volume inspect 64b3
可以看到它自動將/data掛載到的伺服器路徑

如果此時我們將容器刪除,但是檢視volume它仍然存在。但是這個volume name的名字因為是隨機的,看起來非常不方便,所以我們可以在建立容器時為他指定名稱

docker run -d -v redis2:/data --name redis2 redis
之後我們再次檢視一下對應的volume,他的volume name已經修改為我們指定的名字

然後大家可以嘗試一下在redis中建立一些資料,然後將當前的redis容器刪除,再重新啟動乙個redis並掛載到原來的檔案路徑上,看一下redis中的資料是否仍然存在。

接下來我們介紹下一種持久化的儲存方式:bind mouting。這種方式不需要我們在dockerfile中建立volume,而是在啟動容器時直接指定伺服器的檔案路徑和要對映容器內的檔案路徑。

這裡我們使用nginx來演示這種持久化方式:

首先我們來建立乙個dockerfile

from nginx:latest

workdir /usr/share/nginx/html

copy index.html index.html

接下來通過這個dockerfile構建一下映象

docker build -t su/my-nginx .
之後啟動容器

docker run -d -v $(

pwd)

:/usr/share/nginx/html -p 80:80 --name web su/my-nginx

我們是將當前的資料夾掛載容器中

接下來我們進到容器中看一下

docker exec -it web /bin/bash
此時在容器中我們新建立乙個檔案

這時我們再回到伺服器中檢視一下

可以看到容器和伺服器他們兩個是同步的。這樣的好處就是我們並不需要進入到容器中進行編輯檔案,我們只需要在伺服器上編輯檔案就可以將修改同步到容器中實時的提供服務。

動手學Docker 第六彈 搭建Gitlab伺服器

完整專案請檢視github 鏈結 我這裡使用的是centos x86架構的伺服器,記憶體4gb,如果你使用的是aarch64架構的話可能安裝不成功。在安裝之前可以使用uname a檢視自己伺服器的架構。uname asudo yum install y git vim gcc glibc stati...

基礎學習第四彈

typedef struct node stud 沒什麼好說的。多個指標而已 stud create int n else p2 p1 p1 next null return head stud find head stud head,int i else return p1 之前單鏈表那就想是不是...

ctfshow 紅包題第四彈

進去後發現就乙個輸入框,提示我們輸入flag 不過輸了後沒反應,那麼審查元素看看 可以發現是呼叫的ctfshow 這個函式 在chrome的console視窗除錯下這個函式看下它幹嘛的 格式化下 方便審計 可以發現這是把js 變數名16進製制編碼後再把 邏輯複雜化 好我們來讀下這串 首先定義乙個變數...