Docker學習之路(三) docker 文件 分層理解 數據卷 數據同步

Docker學習之路(三) docker 文件 分層理解 數據卷 數據同步

(一) 個人分層理解

在前文中 有過 拉取Mysql 最新版後 再拉取mysql 5.7.30在下載鏡像的時候 提示有些文件已存在!

image-20200521213604103

其實 通過第二章 學習 拉取了許許多多鏡像後 終於發現 無論什麼鏡像 在下載的時候 都不是一個下載進度條 都是多層 多個進度條下載 有的會提示 Already exists 好像 一個鏡像被拆分成了 多層寶塔一般 同時分層下載。

個人理解 : 這種分層技術 是 docker 強大的功能點之一 會減少很多的冗餘文件 每一個鏡像 都設置爲寶塔形,進行分層 。當某一個鏡像 依賴於另一個鏡像的分層 時會先判斷 該層是否已存在 如果存在 則不下載 ,僅僅下載鏡像所需的額外部分。 類似於蓋樓房 一層一層的堆積 上層依賴於下層。 那麼當刪除鏡像的時候呢 ,也會查看自己構成鏡像的所有層 如果 自己的某層級在被另一個鏡像所依賴(使用)則會忽略刪除該層。

​ 正如咱上放的mysql 可能依賴於什麼 (舉個例子: centos 啊 xxxx等) 那麼在第一次pull mysql 時 會判斷當前docker 是否含有 這個centos 鏡像分層 有的話 則不下載 ,繼續下載mysql 鏡像所必須要使用的其餘分層。 然後一層一層的 下載完後 組成了一個完整的 mysql鏡像。

​ 當我們再次下載 mysql5.7.30的時候 可能 mysql:5.7.30 鏡像與mysql 鏡像 有使用到相同的層級 那麼在pull mysql:5.7.30的時候 會先查詢docker 是否含有mysql:5.7.30所要使用的 鏡像 ,經查詢 發現果然 有的層已經是被在拉取 mysql的時候下載了 ,所以拉取5.7.30的時候回提示 Already exists,由於構建mysql5.7.30其餘層沒有 則繼續下載新的其餘的層級。

(二)數據卷的簡單使用

數據卷概念

docker 容器雖然好用 ,但是咱發現了一些問題

場景1: 比如,我在安裝了mysql 並把mysql 作爲數據源 在項目中使用 ,那麼不想使用這個容器 或者這個容器出現問題 需要刪除時 不是吧mysql 容器中的數據也刪除了嗎?? 這不就是我們產後說的,刪庫跑路嗎。 需求:需要 容器數據持久化 或綁定到外部宿主機

場景2: 通過前文 發現了 容器中 無法使用一個Linux命令 ,例如 ll,vim,vi等 那麼我們在修改一些配置文件時就很不方便 例如 修改redis ,mongo 等配置文件 ,還需要額外下載vim 等命令 ,每個容器都需要下載,且下載速非常緩慢,這樣,肯定是不行的。 需求:外部修改 同步到容器 或類似於宿主機與容器間的端口映射

將宿主機中的某個目錄,映射到容器中,這樣,在容器中此目錄下的修改,即便容器關閉,數據也會保留下來,供宿主機和其他容器訪問。

數據卷是一個可供容器使用的特殊目錄,它繞過文件系統,可以提供很多有用的特性:

- 數據卷可以在容器之間共享和重用

- 對數據卷的修改會立馬生效

- 對數據卷的更新,不會影響鏡像

- 卷會一直存在,直到沒有容器使用

數據卷的使用

在run 鏡像的時候 使用-v 參數 來實現 宿主目錄與虛擬機目錄進行掛載映射

例如 啓動一個redis 鏡像 設置端口映射 設置別名爲aa

docker run -d  -p 6888:6379 --name aaa -v /test:/data redis

發現咱們的宿主機 /test 目錄已經與 aaa 容器 /data 目錄掛載起來了

image-20200521221409765

使用xshell再打開一個窗口 進行同步測試

​ 咱們在 容器中新建一個 qqqq.file 文件 ,查看 宿主機中 /test 目錄下是否會自動添加

image-20200521221811218

我們再在容器中 輸出語句到 qqqq.file中

在容器輸出語句到 qqqq.file 也同步到了 外部的 /test目錄下的 qqqq.file 文件

image-20200521222045795

那麼容器內部 同步到外部 沒什麼問題了 咱再測測 外部文件同步內部容器

發現外部添加的 leilei.java 文件也同步到了容器內

image-20200521222230506

那麼 咱們 關閉容器 是否還能進行同步呢?

首先ctrl+p+q退出容器後 在宿主機上編寫 語句 然後從起容器進入內部查看-----發現也同步了

image-20200521222523702

特別需要注意的是:刪除文件 也是同步的,無論是刪除宿主機上文件 還是容器內部文件都會進行同步刪除

咱將整合容器進行刪除 ----整個容器刪除 數據不會同步 意思是 不會因爲容器的刪除 而刪除其掛載在外部宿主機的目錄

image-20200521223023732

那麼做一個小的總結

容器內新建 刪除 修改文件 <---------------> 宿主機外部掛載的目錄 同步

容器刪除<-----|||||-----> 宿主機外部掛載的目錄不會同步

…未完待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章