1. 程式人生 > >自己學Docker:6.Docker的資料持久化之資料卷容器

自己學Docker:6.Docker的資料持久化之資料卷容器

之前,我瞭解到了Docker的資料卷.知道了資料卷是被設計用來共享和持久化資料的,而且它的生命週期獨立於容器.今天來學習Docker的資料持久化另一種方式–資料卷容器.

掛載資料卷容器

這一次,來了解Docker的另一種資料共享和持久化的方式–資料卷容器.
資料卷容器,顧名思義,就是將一個正常的容器作為資料卷,讓其他容器通過掛載這個容器實現資料共享.可是值得注意的是,資料卷容器會降低I/O效能.
首先,我們先建立一個名為data的容器,作為資料卷容器.

sudo docker run -i -t -v /data --name data c9fc7f8eec37

這裡寫圖片描述這裡寫圖片描述
這裡的”c9fc7f8eec37”是映象的id,通過

sudo docker images

可以查到.
就這樣,我們建立了一個名為data的容器.並指定了一個數據卷/data.下面進入到data目錄下,建立一個名為data.txt的檔案.
這裡寫圖片描述
現在,建立了在data下建立了一個data.txt檔案,並寫入內容”data”.

然後,在其他容器中使用–volumes-from 來掛載 dbdata 容器中的資料卷.

sudo docker run -i -t --volumes-from data --name data1 c9fc7f8eec37
sudo docker run -i -t --volumes-from data
--name data2 c9fc7f8eec37

這裡寫圖片描述
通過上面的操作可以看到,在分別建立的data1和data2容器中,都有data目錄,同時,在data1和data2容器的data目錄下的data.txt檔案內容都是一樣的.如果你用ll命令檢視檔案的詳細資訊,會發現檔案其實就是同一個,建立時間等都是一致的.
這裡寫圖片描述
這時的上面建立的三容器都是啟動的狀態.
這裡寫圖片描述

資料卷容器問題一:啟動狀態和級聯

那麼如果容器未啟動,是否可以被當做容器資料卷?
現在,先停掉data1容器.然後在用data1做資料卷容器來掛載.

sudo docker run -i -t --volumes-from
data1 --name data3 c9fc7f8eec37

這裡寫圖片描述
可以看出,data也被成功掛載到了data3裡.上面的操作至少可以說明兩點:

  1. 使用 –volumes-from 引數所掛載資料卷的容器自己並不需要保持在執行狀態。
  2. 已經掛載了資料卷的容器可以級聯掛載資料卷。

資料卷容器問題二:同時掛載資料卷容器

下面在討論一種情況,現在在建立一個容器,掛載目錄為data4.

sudo docker run -i -t -v /data4 --name data4 c9fc7f8eec37

如果我用兩個–volumes-from來分別指定data和data4作為資料卷容器.

sudo docker run -i -t --volumes-from data --volumes-from data4 --name data5 c9fc7f8eec37

這裡寫圖片描述
可以看出,新建立的data5中存在data和data4中掛載的目錄.
這說明:可以使用超過一個的 –volumes-from 引數來指定從多個容器掛載不同的資料卷。

資料卷容器問題三:被掛載的資料卷容器同名問題

可是,如果我們這樣建立容器,

sudo docker run -i -t --volumes-from data --volumes-from data1 --name data6 c9fc7f8eec37

可以發現,
這裡寫圖片描述
只有一個data目錄,這說明雖然指定了不同的容器卷,可是最終指向的是同一個.如果進入data1中,建立一個data1.txt的檔案.在data2容器中也是可以看到的.
這裡寫圖片描述
因為data1之前我們已經停止,所以進入需要先啟動.

sudo docker start data1
sudo docker attach data1

上面的情況是通過多個–volumes-from來掛載有級聯關係的容器,最終新建的容器只有一個目錄.
如果掛載沒有級聯關係的兩個容器,可是被掛載的兩個容器的掛載目錄重名,會是什麼情況?
先新建一個名為data7掛載目錄為data的容器,

sudo docker run -i -t -v /data --name data7 c9fc7f8eec37

然後在data下新建一個data7.txt.
這裡寫圖片描述
這是,容器data和data7是分別掛載了data目錄的不同兩個容器.現在再新建一個容器data8,並把data和data7作為它的資料卷容器

sudo docker run -i -t --volumes-from data --volumes-from data7 --name data8 c9fc7f8eec37

可是發現只有一個data目錄,並且裡面只有data7.txt一個檔案.
這裡寫圖片描述
然後,我駛入如下命令建立容器data9.

sudo docker run -i -t --volumes-from data7 --volumes-from data --name data9 c9fc7f8eec37

這裡寫圖片描述
發現也是隻有一個data目錄,可是內容確實容器data的內容,在裡面新建一個data9.txt在容器data裡也是可以看到的.
這裡寫圖片描述
由此可以得知,如果使用–volumes-from掛載多個數據卷容器時,如果對應的容器掛載的目錄是相同的,那麼只有最後一個–volumes-from制定的資料卷容器會掛載成功.

資料卷容器的刪除

容器使用完成後,為了節約資源難免會被刪除,那麼資料卷容器刪除後,所建立的檔案是否還在?
上面我在data9中建立了一個檔案data9.txt,同時data9又掛載容器data和data7.現在刪除容器data9.

sudo docker rm data9

這裡寫圖片描述
在容器data中可以發現,在容器data9中建立的檔案data9.txt仍然是存在的.
說明資料卷容器也是Docker容器資料持久化的一種方式.正是這個特性,可以讓使用者方便的在容器之間升級和移動資料卷。
學的越多,越覺得之前說懂得的可笑,可是什麼都要一步一步來,不積跬步無以至千里,今天就到這裡了.

相關推薦

自己Docker:6.Docker資料持久化資料容器

之前,我瞭解到了Docker的資料卷.知道了資料卷是被設計用來共享和持久化資料的,而且它的生命週期獨立於容器.今天來學習Docker的資料持久化另一種方式–資料卷容器. 掛載資料卷容器 這一次,來了解Docker的另一種資料共享和持久化的方式–資料卷容器

自己Docker:5.Docker資料持久化資料

首先,別忘記之前的兩個問題: 1. 如何儲存我們在容器裡的修改? 2. 如果apt-get如果不能安裝時,如何在Docker中安裝軟體? 刪除容器命令 在此之前,先記一個命令, sudo docker rm ID/NAME 即刪除建立的容器.

iOS-資料持久化Sqllite

iOS中的資料儲存方式 Plist(NSArray\NSDictionary) Preference(偏好設定\NSUserDefaults) NSCoding(NSKeyedArchiver\NSkeyedUnarchiver) SQLite3 Core Data

HBase資料持久化HRegion.flushcache即CF持久化

  我們從HRegion.flushcache開始分析。由於這個過程還是比較複雜的,因此,在這一節,我們不會分析的太過詳細,只是單單的介紹一下其大體流程,待大家有了整體的把握之後,我們將在下一節詳細介紹其持久化的具體流程。   為了儘可能嚴謹的描述整個流程,小編在講解過程中會貼比較多的圖來描述。

6-Redis 的持久化 AOF

2017-01-01 16:42:13 該系列文章連結NoSQL 資料庫簡介Redis的安裝及及一些雜項基礎知識Redis 的常用五大資料型別(key,string,hash,list,set,zset)Redis 配置檔案介紹 Redis 持久化之RDB Redis 持久化之AOFRedis 主從複製

《第一行程式碼》第二版 學習總結15 資料持久化LitePal開源庫的基本使用

      最近利用下班時間,找了看什麼書比較適合初學android的朋友,很多人推薦了這本書,於是就買了一本,感覺看書,思考,動手,再思考和總結這樣過程還是很有必要的,於是就打算把自己學習的東西簡單的總結一下;方便自己以後查詢,也有利於學習的鞏固。在這裡首先要感謝一下書籍的

Android開發學習路--資料持久化初體驗

    上班第一天,雖然工作上處於醬油模式,但是學習上依舊不能拉下,接著學習android開發吧,這裡學習資料持久化的 知識。     其實資料持久化就是資料可以儲存起來,一般我們儲存資料都是以檔案,或者資料庫的形式儲存的,android程式也有 檔案和資料庫的儲存,此外還

Hibernate實戰資料持久化四Session的clear()、flush()、commit()、close()方法

flush()flush方法的主要作用就是清理快取,強制資料庫與hibernate快取同步,以保證資料的一致性。    通常,執行session.save,update,delete的時候,只是一個登記

自己驅動6——uboot程式碼閱讀一(start.S)

uboot中的start.S檔案開頭的這段程式碼:.globl _start _start: b reset ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefe

iOS 資料持久化使用NSUserDefaults儲存資料

iOS下可以使用NSUserDefaults、sqlite、CoreData幾種常用的方式來儲存資料,其中NSUserDefaults用來儲存類似使用者的配置等這些的資料,後兩者使用者儲存大批量和比較複雜的資料。NSUserDefault的使用比較簡單: NSUserDef

資料操作資料的增刪改

插入資料INSERT 1. 插入完整資料(順序插入) 語法一: INSERT INTO 表名(欄位1,欄位2,欄位3…欄位n) VALUES(值1,值2,值3…值n); 語法二: INSERT INTO 表名 VALUES (值1,值2,值3…值n); 2. 指定欄位插入

Pandora資料工廠資料服務

資料服務 一、背景概述 ​ 隨著企業IT建設的快速發展,企業內部系統越來越多,資料分佈也越來越分散。為了實現對各系統大資料傳輸過程的高效、可靠、可監控,以及對整個傳輸過程中的可管理,公司研發設計了一個通用的大資料服務平臺,把原本各個系統之間直接的資料互動抽取出來,通過底層統一的傳

Pandora資料工廠資料開發

資料開發Leopard概述 ​ 資料開發Leopard根據使用者業務需求,對資料進行加工處理、分析與挖掘分析與挖掘(資料分析、資料探勘)等提供資料離線計算分析功能。把使用者設計的資料計算流程轉化為多個相互依賴的任務,供排程系統自動排程執行。 一、資料計算任務流程 二、任

Pandora資料工廠資料儲存系統架構

資料儲存系統概述 ​ 資料儲存系統作為大資料平臺最核心的資料基礎,不再僅是傳統分散的、單一的底層裝置。除了要具備高效能、高安全、高可靠等特徵之外,還要有虛擬化、並行分佈、自動分層、彈性擴充套件、異構資源整合、多樣性等多方面的特點,才能滿足具備大資料特徵的業務應用需求。針對數量的持續增

Pandora資料工廠資料整合

3 資料整合概述 ​ 資料整合系統提供的穩定高效、彈性伸縮的資料同步平臺。致力於異構資料來源之間資料高速穩定的資料移動及同步能力。 一、資料的同步流程圖如下: 二、支援的資料來源型別 文字資料 Text CSV Js

Pandora資料工廠資料開發流程

資料開發流程 ​ 資料開發的總體流程包括原資料、資料採集、資料儲存、資料分析與處理、資料同步和資料視覺化,如下圖所示: 資料來源 業務系統每天會產生大量結構化的資料,這些資料都儲存在業務系統所對應的資料庫中,包括MySQL、Oracle等型別; 資料採集(資

資料倉庫資料模型

關於資料倉庫的概念,這裡不再累贅。先看下面的圖(資料倉庫建設的7個主要環節): 本文,主要針對第三塊資料倉庫模型設計來討論交流,尤其是網際網路行業。 一、關於資料倉庫資料模型 1. 資料倉庫資料模型是指使用實體、屬性及其關係對企業運營和邏輯規則進行統一的定義、編碼和

資料優化資料傾斜

資料傾斜 資料傾斜概念 在做計算的時候,資料的分散度不夠(資料的Key分佈不均),導致資料分佈在一臺或幾臺機器計算 症狀:典型的現象就是資料reduce到99%很久不動了 資料傾斜原因 總原因:key分佈不均 業務資料的特點(資料的冪律分佈) 人為建表的疏忽 join、group by、count d

Python基礎資料結構資料轉換(Dict,Set,Tuple,List)

本章是Python基礎資料結構的第六篇,由於之前沒有接觸過太多的Python版本的資料結構,所以在學習的過程中集百家之長和自己的見解,加以實踐,學習Python。 Python中用到tuple的方法,和注意事項都以程式碼的形式體現 #!/usr

資料系列資料倉庫Hive知識整理(四)Hive的嚴格模式,動態分割槽,排序,事務,調優

1.Hive的嚴格模式Hive提供了一個嚴格模式,可以防止使用者執行那些產生意想不到的不好的影響的查詢。想想看在那麼大的資料量的前提下,如果我們在分割槽上表上使用查詢所有,或是使用了笛卡爾積查詢資料等等不良情況,那得花費我們多少時間和資源成本,Hive在預設情況下會開啟一種模