初識docker 管理容器資料

2021-08-09 17:45:25 字數 3395 閱讀 2468

管理容器資料

到目前為止,我們已經介紹了

docker

的一些基本概念,了解了如何使用

docker

映象,以及容器之間如何通過網路連線。本節,我們來討論如何管理容器和容器間的共享資料。

接下來,我們將主要介紹

docker

管理資料的兩種主要的方法:

資料卷

資料卷是指在存在於乙個或多個容器中的特定目錄,此目錄能夠繞過

union file system

提供一些用於持續儲存或共享資料的特性。

新增乙個資料卷

你可以在

docker run

命令中使用

-v標識來給容器內新增乙個資料卷,你也可以在一次

docker run

命令中多次使用

-v標識掛載多個資料卷。現在我們在

web容器應用中建立單個資料卷。

這會在容器內部建立乙個新的卷

注:類似的,你可以在

dockerfile

中使用volume

指令來給建立的映象新增乙個或多個資料卷。

掛載乙個主機目錄作為卷

使用-v

,除了可以建立乙個資料卷,還可以掛載本地主機目錄到容器中:

這將會把本地目錄

掛載到容器的

目錄。這在做測試時是非常有用的,例如我們可以掛載宿主機的源**到容器內部,這樣我們就可以看到改變源**時的應用時如何工作的。宿主機上的目錄必須是絕對路徑,如果目錄不存在

docker

會自動建立它。

注:出於可移植和分享的考慮,這種方法不能夠直接在

dockerfile

中實現。作為宿主機目錄

——其性質

——是依賴於特定宿主機的,並不能夠保證在所有的宿主機上都存在這樣的特定目錄。

docker

預設情況下是對資料卷有讀寫許可權,但是我們通過這樣的方式讓資料卷唯讀:

這裡我們同樣掛載了

目錄,只是新增了

ro選項來限制它唯讀。

將宿主機上的特定檔案掛載為資料卷

除了能掛載目錄外,

-v標識還可以將宿主機的乙個特定檔案掛載為資料卷:

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

上述命令會在容器中執行乙個

bash shell

,當你退出此容器時在主機上也能夠看到容器中

bash

的命令歷史。vi和

sed --in-place

會導致inode change

。docker v1.1.0

之後的版本,會產生乙個錯誤:

"sed cannot rename ./sedkdj9dy: device or resource busy"

。這種情況下如果想要更改掛載的檔案,最好是直接掛載它的父目錄。

建立、掛載資料卷容器

如果你想要容器之間資料共享,或者從非持久化容器中使用一些持久化資料,最好建立乙個指定名稱的資料卷容器,然後用它來掛載資料。

讓我們建立乙個指定名稱的資料卷容器:

$ sudo docker run -d -v /dbdata --name dbdata training/postgres echo data-only container for postgres

你可以在另外乙個容器使用

--volumes-from

標識,通過剛剛建立的資料卷容器來掛載對應的資料卷。

$ sudo docker run -d --volumes-from dbdata --name db1 training/postgres

可以將對應的資料卷掛載到更多的容器中:

$ sudo docker run -d --volumes-from dbdata --name db2 training/postgres

當然,您也可以對乙個容器使用多個

--volumes-from

標識,來將多個資料卷橋接到這個容器中。

資料卷容器是可以進行鏈式擴充套件的,之前的

dbdata

資料卷依次掛載到了

dbdata

、db1

和db2

容器,我們還可以使用這樣的方式來將資料卷掛載到新的容器

db3:

$ sudo docker run -d --name db3 --volumes-from db1 training/postgres

即使你刪除所有

de 掛載了資料卷

dbdata

的容器(包括最初的

dbdata

容器和後續的

db1和

db2),資料卷本身也不會被刪除。要刪在磁碟上刪除這個資料卷,只能針對最後乙個掛載了資料卷的容器顯式地呼叫

docker rm -v

命令。這種方式可使你在容器之間方便的更新和遷移資料。

備份、恢復或者遷移資料卷

資料卷還可以用來備份、恢復或遷移資料。為此我們使用

--volumes-from

引數來建立乙個掛載資料卷的容器,像這樣:

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

這裡我們啟動了乙個掛載

dbdata

卷的新容器,並且掛載了乙個本地目錄作為

/backup

卷。最後,我們通過使用

tar命令將

dbdata

卷的內容備份到容器中的

/backup

目錄下的

backup.tar

檔案中。當命令完成或者容器停止,我們會留下我們的

dbdata

卷的備份。

然後,你可以在同一容器或在另外的容器中恢復此資料。建立乙個新的容器

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

然後在新的容器中的資料捲裡

un-tar

此備份檔案。

$ sudo docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar

你可以對熟悉的目錄應用此技術,來測試自動備份、遷移和恢復。

持有物件的管理(容器)

collection 存放單一的物件,map存放鍵值對。你可以用泛型制定插入的型別。使用的泛型的好處是在獲取,插入物件的時候,不必為型別的轉換而煩惱。特性 key value,鍵值對,用的非常多,能夠在開發中解決很多問題。使用的比較頻繁的是hashmap和hashset,基於雜湊的存放,效能也比較好...

初識容器與 Docker

1.什麼是 docker?docker 是基於 go 語言實現的開源容器專案,最初由 dotcloud 公司發起。docker 在業界造成的影響力還是蠻大的,後來 hotcloud 公司改名為 docker inc,專注於 docker 相關技術和產品的開發。r這裡的應用元件,既可以是乙個 web ...

docker 容器管理

在雲端搭建微服務架構的系統,容器管理非常的重要,雖然docker 提供了大量的工具來實現容器管理,他們包括 portainer 乙個web 容器管理工具 docker command line 命令工具 daemon restfull 工具 但是,對於非運維人員而言,這些工具還是太麻煩了。我們計畫為...