Docker容器數據持久化和容器網橋連接

Docker容器數據持久化 --volumes

docker 容器內的數據是獨立於鏡像之外的,利用「數據卷」將其持久化到宿主機。

數據卷

數據卷其實就是一個目錄或者一個文件,該目錄(或文件)可以存在於宿主機上。將此目錄(或文件)映射到容器中,便可以持久化容器內的數據到宿主機。
如果目錄不存在於宿主機上,而是存在於一個容器內部,那麼此容器便可以被稱爲「數據卷容器」

下面講解一下具體的操作方式。

持久化到目錄/ 文件
數據卷如果是宿主機的一個目錄,可以進行如下操作將容器內的數據持久化:

命令用法如下:

1docker run -itd --name [容器名字] -v [宿主機目錄]:[容器目錄] [鏡像名稱] [命令(可選)]
2docker run -itd --name [容器名字] -v [宿主機文件]:[容器文件] [鏡像名稱] [命令(可選)]

該命令是通過一個鏡像啓動一個容器。
--name指定容器的名稱;
-v指定宿主機的某目錄作爲數據卷掛載到容器中,使該容器與宿主機共享此目錄 。

注意
1.如果本地路徑不存在,docker 會自動創建。
2.宿主機的目錄請使用絕對路徑。

操作實例:
1、執行如下命令,將宿主機的 /Users/peter/dockerdata/ 目錄映射到新創建的nginx 容器中的 /data 目錄:

1docker run -itd --name nginx -v /Users/peter/dockerdata:/data nginx
2
3docker run -itd --name nginx -v /Users/ethanyan/dockerdata/testdata.txt:/data/testdata.txt nginx

2、接下來驗證是否生效,先在本地共享目錄下創建一個新目錄 NG

1cd /Users/ethanyan/dockerdata
2mkdir NG

3、進入容器 nginx 中看是否存在 NG目錄:

1docker exec -it nginx /bin/bash #進入nginx容器
2ls /data   #列出data文件下的內容
3NG

可發現在本地創建目錄後,容器內的確實也出現了新建的目錄。

4、以上操作反之亦然
在容器的 /data/NG目錄中創建一個文件testdata.txt ,退出容器後發現本地也出現了該文件。
使用此方法可以讓容器和宿主機共享目錄/文件,並將容器內的數據持久化到本地。

持久化到容器
如果不想這些數據直接暴露在宿主機,可以使用數據卷容器的方式。將數據卷容器掛載到其他容器,就可以多個容器之間共享數據了,而且還可以持久化的保存數據(後面會講解如何備份和恢復數據卷容器)

注意:數據卷容器不啓動

1、創建數據卷容器

1docker create -v [容器數據卷目錄] --name [容器名字] [鏡像名稱] [命令(可選)]
2
3docker create -v /data/ --name data nginx

既然需要創建一個數據卷容器,那麼就需要使用鏡像,一般大家都習慣使用 centos 或者 Ubuntu 作爲基礎鏡像

2、將數據卷容器掛載到其他容器

1# 創建容器並掛載數據卷命令
2docker run --volumes-from [數據卷容器 id/name] -itd --name [容器名字] [鏡像名稱] [命令(可選)]
3# 示例 
4docker run  --volumes-from VolumesID -itd --name nginx_test1 nginx /bin/bash
5docker run  --volumes-from VolumesID -itd --name nginx_test2 nginx /bin/bash

注意:使用數據卷容器是容器之間共享數據,不涉及宿主機,因此數據沒有在宿主機上。

備份與恢復
數據卷容器的備份與恢復並不是容器的備份與恢復,實質上是數據的備份與恢復。

備份

1docker run -it --volumes-from [數據卷容器id或者name] -v [宿主機存放備份文件的目錄]:[容器內存放備份文件目錄] [鏡像] tar cvf [備份文件路徑] [要備份的目錄]

我們執行示例命令:

1docker run -it --volumes-from data -v /Users/peter/dockerdata/:/backup nginx tar cvf /backup/backup.tar /data
2tar: Removing leading `/' from member names
3/data/
4/data/file.txt
5

該命令是加載數據卷容器並將容器內的/data目錄打包,然後把壓縮包保存到 映射到容器內 的新數據卷,本地目錄爲 /Users/peter/dockerdata/ 。執行完後,會在本地該目錄出現壓縮包 backup.tar

注意:
1、備份的命令執行完後會創建出一個臨時容器,刪除即可。重要的是壓縮包。
之所以會出現一個臨時容器,是因爲備份的原理是:
創建一個新的容器掛載數據卷容器,而且此容器還與宿主機共享了一個目錄(新數據卷),執行打包命令將數據卷容器內的數據打包保存到共享目錄中,所以本地會出現一個壓縮包。

恢復
1、創建一個新的數據卷容器 data_new

1docker create -v /data/ --name data_new nginx

2、恢復之前的備份文件

1docker run --volumes-from [新創建的數據卷容器id或者name] -v [宿主機存放備份文件的目錄]:[容器內存放備份文件目錄] [鏡像] tar xvf [備份文件]
2
3# 執行示例命令
4docker run --volumes-from data_new -v /Users/peter/dockerdata/:/backup nginx tar xvf /backup/backup.tar
5data/
6data/file.txt

3、爲了驗證是否恢復,我們可以新創建一個容器並掛載新的數據卷容器:

1docker run  --volumes-from data_new -itd --name nginx_test6 nginx /bin/bash
2
3docker exec -it nginx_test6 /bin/bash
4
5root@2b54f0bfefbe:/# ls /data
6file.txt
7root@2b54f0bfefbe:/# cat /data/file.txt
8hello world

可看到數據卷容器已經恢復。

備份與恢復的原理

不管是備份還是恢復,我們都使用了一箇中間介質,此介質便是一個容器。因爲數據卷容器是不啓動的,爲了備份數據,我們就需要使用一個掛載了此數據卷容器的中間介質(容器)。此介質不光要能連接數據卷容器,還需要連接本地,因此我們又將本地的一個目錄映射到了中間介質中。

備份就是中間介質將數據卷容器的目錄打包後,再通過映射的目錄共享給本地,所以本地會出現一個壓縮包。容器列表多了一個新的容器,此容器便是中間介質。

恢復就是中間介質通過映射到容器的共享目錄,讀取到本地的備份文件(壓縮包),然後在容器內部解壓縮,數據就恢復到了掛載的數據卷容器中。

當然,此中間介質也可以使用--name 參數命名,便於刪除。

docker容器網橋連接

容器之間如何互相通訊?具體的命令有哪些?

橋接(網橋)

網橋可以簡單的理解爲「局域網」,使加入網橋的容器之間可以互相通訊、暴露全部鏈接,同時與外界又保證了相對隔離的運行環境。

新建網絡
下面先創建一個新的 Docker 網絡。

1$ docker network create -d bridge [網橋名稱]
2$ docker network create -d bridge test-net

參數-d bridge是默認配置,可寫可不寫
參數指定 Docker 網絡類型,有 bridge、overlay。
其中 overlay 網絡類型用於 Swarm mode(集羣模式),在本小節中你可以忽略它。

創建網橋


通過網橋連接容器
連接網橋分爲3種方式,一種是在創建容器時連接網橋,一種是在容器已經運行時連接網橋,最後一種是運行容器時連接網橋:
1、創建容器並連接:

1docker create --name [容器名稱] --network [網橋名稱] [鏡像名稱]
2docker create --name test1 --network test-net ubuntu

2、容器已經運行時連接:

1docker network connect [網橋名稱] [容器名稱]
2docker network connect test-net ubuntu

3、運行一個容器並連接到網橋:

1$ docker run -itd --name [容器名] --network [網橋名稱] [鏡像名稱] /bin/bash
2$ docker run -itd --name test1 --network test-net ubuntu /bin/bash

查看所有網橋

1docker network ls

查看某網橋的配置信息

1docker network inspect [網橋id或者名稱]

刪除網橋

1docker network rm [網橋id或者名稱]

ping 查看容器是否連接
ping命令,大家都很熟悉吧。
如果未安裝,首先需要安裝Ping

1$ apt-get update
2$ apt install iputils-ping
3
4#進入容器test1內部
5$ docker exec -it test1 /bin/bash 
6
7$ ping test1   #進入容器test2裏面ping test1
8$ ping test2   #進入在容器test1裏面ping test2
Ping

文章合集

Selenium | Appium  | Jenkins  |  Jmeter 

軟件測試方法彙總 Postman接口參數化 | 測試用例設計

免費福利 視頻教程

Selenium | Appium | Jenkins | Jmeter

往期性能推文:

01|性能綜述: 性能測試的概念到底是什麼?(深度好文)

02|性能綜述: TPS和響應時間之間是什麼關係?

03|性能綜述: 怎麼理解TPS、QPS、RT、吞吐量這些性能指標?

04|JMeter和LoadRunner:要知道工具僅僅只是工具

05|指標關係:你知道併發用戶數應該怎麼算嗎?
性能測試工具--Locust官方文檔(API)解讀(全)

AWS

如何使用AWS EC2+Docker+JMeter構建分佈式負載測試基礎架構

萬水千山總是情,點個在看 行不行!!?

 

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