天天看點

docker資料卷備份恢複以及配置橋接網絡

備份:

如果資料卷容器的共享目錄已經挂載到了本地主控端的磁盤上,那麼就無需進行資料卷備份。沒有進行挂載到本地,而是作為共享目錄的資料卷容器,就得定期将資料卷進行一個備份,不然如果資料卷被删除的話,資料也會丢失。

假設資料卷容器共享的目錄是data,由于是作為一個共享目錄的資料卷容器,那麼就會與普通容器進行目錄的關聯。這樣我們可以在本地磁盤上建立一個backup目錄,在建立容器的時候,把容器的backup目錄映射到本地主控端的backup目錄上,之後需要備份data目錄的資料時,隻需要把data目錄打包到backup目錄下即可,這樣就會寫入到本地磁盤的backup中。

示意圖:

docker資料卷備份恢複以及配置橋接網絡

實作如下:

1.在本地磁盤上建立一個backup目錄:

2.建立容器,把容器的backup目錄映射到本地主控端的backup目錄上,并将data目錄打包到backup目錄下:

說明:首先我們需要使用testvol資料卷新開一個容器,同時我們還需要把本地的/backup/目錄挂載到該容器的/backup下,這樣在容器中/backup目錄裡面建立的檔案,我們就可以直接在/data/backup/目錄中看到了。 然後再把/data/目錄下面的檔案打包到成data.tar檔案放到/backup目錄下面,這樣就實作了一個簡單的備份。

恢複:

恢複則是反其道而行之,先建立一個資料卷容器,再建立一個新的容器并挂載該資料卷容器,然後再把打包的tar包解包。

1.建立資料卷容器:

2.挂載資料卷建立容器,并解包:

我們平時使用的VMware、VirtualBox等虛拟機軟體,都有不同的網絡模式,例如:NAT模式、橋接模式、僅主機模式等。而docker也是一種虛拟技術,是以自然也有不同的網絡模式,docker有四種網絡模式。

host模式,使用docker run時使用 --net=host 指定。docker使用的網絡實際上和主控端一樣,在容器内看到的網卡ip是主控端ip。

container模式,使用 --net=container:container_id/container_name 來指定。多個容器使用共同的網絡,看到的ip是一樣的。例如容器A和容器B使用共同的網絡,那麼它們兩個看到的ip就是一樣的。

none模式,使用 --net=none 指定,這種模式下,不會配置任何網絡。

bridge模式,使用 --net=bridge 指定預設模式,不用指定預設就是這種網絡模式。這種模式會為每個容器配置設定一個獨立的Network Namespace。類似于vmware的nat網絡模式。同一個主控端上的所有容器會在同一個網段下,互相之間是可以通信的。

外部通路容器:

以上簡單介紹了幾種docker的網絡模式,我們也知道docker模式使用的是bridge模式,可以與主控端以及該主控端上的其他容器進行通信。但是,如果想要在主控端外部通路該容器,則是無法通路的。

解決這個問題的方法,就是我們可以将容器端口映射到主控端上,那麼通路主控端的端口即可,下面我們來用一個小例子進行一個簡單的示範:

1.進入到一個運作中的容器,或者從現有的鏡像建立一個容器,進入容器後安裝nginx,安裝完後退出容器:

2.然後把該容器導成一個新的鏡像,接着再使用新鏡像建立容器,并指定端口映射:

-p 可以指定端口映射,本例中将容器的80端口映射為本地的8088端口。

以上我們已經完成了nginx的安裝以及導出鏡像,并且也建立好了容器。但是建立的容器,如果啟動nginx或者httpd這類服務的時候會報如下錯誤:

Failed to get D-Bus connection: Operation not permitted

例如,我進入到剛剛建立的容器下啟動nginx服務:

如上,可以看到報錯了。

這是因為dbus-daemon沒有啟動,解決該問題的方法如下:

啟動容器時,要加上--privileged -e "container=docker" ,并且最後面的指令改為/usr/sbin/init

例如,我們删除之前的容器,重新建立:

如上,可以看到,容器裡的nginx已經啟動了,并且也映射了本地主控端的8088端口,那麼我們來從浏覽器上通路主控端的8088端口,看看是否能通路到這個nginx服務:

docker資料卷備份恢複以及配置橋接網絡

沒問題,從浏覽器上通路成功。以上我們就解決了外部網絡通路容器服務以及在容器内啟動nginx服務報opration not permitted錯誤的問題。

為了使本地網絡中的機器和Docker容器更友善的通信,我們經常會有将Docker容器配置到和主機同一網段的需求。這個需求其實很容易實作,我們隻要将Docker容器和主控端的網卡橋接起來,也就是需要配置一個橋接網絡,然後再給Docker容器配上IP就可以了,實作步驟如下:

1.首先在主控端上進入到網卡配置檔案的目錄下,并拷貝網卡配置檔案:

2.然後編輯網卡配置檔案:

3.編輯主控端的網卡配置檔案,并重新開機網卡:

4.重新開機網卡成功後,使用ifconfig檢視網卡資訊如下:

如上,可以看到,br0已經被識别了,并且将原本是eno16777728網卡的ip分給了br0網卡,而且正常的情況下eno16777728是沒有ip的。

5.安裝pipwork工具:

6.開啟一個容器,并進入到該容器中:

7.使用pipework工具給這個容器配置設定ip:

如上,可以看到該容器已經被成功配置設定了我們指定的ip,并且也能正常ping通外網。

接着就是測試在外部能否ping通這個容器的ip,打開windows的cmd,執行以下指令:

輸出結果如上,可以正常ping通。

小結:以上我們通過第三方的pipework工具實作了容器網絡與主控端網絡的橋接,這種方式配置起來雖然稍微有些麻煩,但是友善于本地網絡中的機器和Docker容器的通信。而docker自帶的bridge模式,雖然在字面上是橋接,但是實際上更類似于nat模式,或者說就是nat模式,是以我們才需要使用pipework來實作橋接。

本文轉自 ZeroOne01 51CTO部落格,原文連結:http://blog.51cto.com/zero01/2069594,如需轉載請自行聯系原作者

繼續閱讀