選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
3 分鐘閱讀時間 (506 個字)

每日小知識#7-volume的種類

Screen-Shot-2021-03-23-at-10.58.27-AM

大家很常用到 docker volume,不過真的知道它其實有細分 三種 嗎?就聽我…講個故事吧(逃)

Volume 其實是用 mount(掛載)的,
而在 Linux 這是個再常見不過的手法,
因為對 Linux 來說所有的東西都是一個 File 嘛,
mount 只是決定我外來的東西要掛在 樹枝的哪個節點

而這應用在 container 又是什麼情形呢?
首先是第一種,bind mount,這種比較接近 Linux Mount,
而它的語法是 -v「左」邊放 「Host 路徑」,「右邊」放 「container 路徑」,這樣 container 在第一次,以及之後進入 UP 的狀態時,就會是以「Host 路徑」的內容為主(右邊被暫時隱藏),僅此而已。

第二種是 docker managed volumes ,這種也挺常用到的,而它的語法是 -v 「左」邊放一個「任意名稱」,右邊一樣放「container 路徑」。那麼,左邊的東西要去哪裡找呢?這就要看你的 Docker Root Dir 設在哪裡囉。

Docker Root Dir 可以透過「 docker info 」這個指令查到,以我的情形來講是用預設的 /var/lib/docker,而在這目錄底下還會有一個 volumes,再進去就可以看到你剛剛給的「 任意名稱 」的目錄囉。

而跟 bind mount 不太一樣的是,第一次啟動 container 的時候,會把設在右邊的 container 路徑其內容放到左邊的目錄底下,第二次開始才會是以「左」邊的路徑內容為主喔。

這也是為什麼我們去更版的時候,要記得更新 Volume 的內容,因為 container 的內容已經被 偷偷隱藏起來了

第三種現在比較少用到,是以其他 container 的 volume 當作自己的 volume,主要透過 –volumes-from 這個 關鍵字來操作,其餘的原理都跟前兩者很相似,就不多作解釋了。(p.s. volume 被拿來用的那個通常被叫作 data container)

以上幾種 Volume 都介紹過了,那麼以後要備份 container 外掛的 volume 內容就知道要去哪找了吼,各位加油!

Reference:
https://docs.docker.com/storage/bind-mounts/
https://docs.docker.com/storage/volumes/

p.s. 平常大家在 docker-compose 裡看到的那個 volumes 區塊的定義跟使用的都是屬於 docker managed volumes 的範疇,除非你左手邊是直接放 Host 路徑(e.g. mysql)。

每日小知識 #8 - CI_CD 流程
利用 .NET Core Worker Service 來建置背景服務吧!

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2024/05/13, 週一

Captcha 圖像