Docker實戰 四 之Docker資料管理

2021-09-20 02:32:10 字數 2419 閱讀 1919

在生產環境中使用docker的過程中,往往需要對資料進行持久化,或者需要在多個容器之間進行資料共享,這必然涉及到容器的資料管理操作。

容器中管理資料主要有兩種形式:

資料卷:容器內資料直接對映到本地主機環境;

資料卷容器:使用特定容器維護資料卷;

1.資料卷

資料卷是乙個可供容器使用的特殊目錄,它將主機作業系統目錄直接對映進容器,類似於linux中的mount操作。

資料卷可以提供很多有用的特性:如下:

a.資料卷可以在容器之間共享和重用,容器間傳遞資料將變得高效方便;

b.對資料卷內資料的修改會立馬生效,無論是容器內操作還是本地操作;

c.對資料卷的更新不會影響映象,解耦了應用和資料;

d.捲會一直存在,直到沒有容器使用,可以安全地解除安裝它;

(1)在容器內建立乙個資料卷

注意: -p是將容器服務暴露的埠,是自動對映到本地主機大的臨時埠。

(2)掛載乙個主機目錄作為資料卷

使用-v標記也可以指定掛載乙個本地的已有目錄到容器中去作為資料卷(推薦方式)

這個功能在進行測試的時候十分方便,比如使用者可以將一些程式或資料放到本地目錄中,然後在容器內執行和使用。另外,本地目錄的路徑必須是絕對路徑,如果目錄不存在docker,會自動建立。

(3)掛載乙個本地主機檔案作為資料卷

-v標記也可以從主機掛載單個檔案到容器中作為資料卷(不推薦)

docker run --rm -it -v ~/.bash_history :/.bash_history ubuntu /bin/bash

這樣就可以記錄在容器輸入過的命令歷史了。

注意:如果直接掛載乙個檔案到容器,使用檔案編輯工具,包括vi或者sed --in-place的時候,可能會造成檔案inode的改變,從docker1.1.0起,這回導致報錯誤資訊。所以推薦的方式是直接掛載檔案所在的目錄。

2.資料卷容器

如果使用者需要在多個容器之間共享一些持續更新的資料,最簡單的方式是使用資料卷容器。資料卷容器也是乙個容器,但是它的目的是專門用來提供資料卷供其他容器掛載。

首先,建立乙個資料卷容器dbdata,並在其中建立乙個資料卷掛載到/dbdata;

檢視 data

ls然後,可以在其他容器中使用--volumes-from來掛載dbdata容器中的資料卷,例如建立db1和db2兩個容器,並從dbdata掛載資料卷:

docker run -it --volumes-from dbdata --name db1 ubuntu

docker run -it --volumes-from dbdata --name db2 ubuntu

此時,容器db1和db2都掛載同乙個資料捲到相同的/dbdata目錄。三個容器任何一方在該目錄下的寫入,其他容器都可以看到。

可以多次使用--volumes-from引數來從多個容器掛載多個資料卷。還可以從其他已經掛載了容器卷的容器來掛載資料卷。

注意:使用--volumes-from引數所掛載資料卷的容器自身並不需要保持在執行狀態。

如果刪除掛載了掛載的容器(包括dbdata,db1和db2),資料卷並不會被自動刪除。如果要刪除乙個資料卷,必須在刪除最後乙個還掛載著它的容器時顯式使用docker rm -v命令來指定同時刪除關聯的容器。

使用資料卷容器可以讓使用者在容器之間自由地公升級和移動資料卷。

3.利用資料卷容器來遷移資料

可以利用資料卷容器對其中的資料卷進行備份、恢復,以實現資料的遷移。

(1)備份

使用下面的命令來備份dbdata資料容器內的資料卷:

docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar dbdata

這個命令有點複雜,具體分析:

首先利用ubuntu映象建立了乙個容器worker.使用--volumes-from dbdata引數來讓worker容器掛載dbdata容器的資料卷(即dbdata資料卷);使用-v $(pwd):/backup引數來掛載本地的當前目錄的backup.tar。

(2)恢復

如果要將資料恢復到乙個容器,可以按照下面的步驟操作。首先建立乙個帶有資料卷的容器dbdata2;

docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

然後建立另外乙個新的容器,掛載dbdata2的容器,並使用untar解壓備份檔案到所掛載的容器卷中;

資料是最寶貴的資源。docker在設計上考慮這點,為資料管理提供了充分的操作支援。

Docker系列四 使用UI管理docker容器

一 什麼是portainer?docker pull portainer portainer三 執行portainer portainer執行方式有以下兩種方式 1 單機版執行 如果僅有乙個docker宿主機,則可使用單機版執行,執行以下命令就可以啟動了 docker run d p 9000 90...

docker入門實戰(四) swarm 集群

swarm集群就是執行docker的一組機器相連成乙個集群。這些機器可以是物理機也可以是虛擬機器。在加入集群後,這些機器被稱作是是集群中的乙個節點。swarm managers 可以使用幾種策略來執行容器 1 emptiest node 安排容器執行在利用率最低的機器上 2 global 這種情況下...

Docker基礎入門實戰之Docker安裝

虛擬化技術是乙個通用的概念,在不同的領域存在不同的理解,在計算機領域,一般指計算機虛擬化或伺服器虛擬化。虛擬化是一種資源管理技術,可以抽象計算機的各種實體資源,如伺服器 網路 記憶體及儲存等,打破結構之間的未切割障礙,允許使用者更好的應用這些資源。虛擬化包含硬體虛擬化 作業系統虛擬化等。其中,硬體虛...