濮阳杆衣贸易有限公司

主頁 > 知識庫 > 如何利用Docker容器實現(xiàn)代理轉(zhuǎn)發(fā)與數(shù)據(jù)備份詳解

如何利用Docker容器實現(xiàn)代理轉(zhuǎn)發(fā)與數(shù)據(jù)備份詳解

熱門標簽:寧波400電話辦理對企業(yè)的意義 400電話申請要什么條件 北京人工外呼系統(tǒng)廠家 i智能電話機器人yeta 西柏坡地圖標注 廣東如何申請400電話 燃氣管線地圖標注顏色 話術(shù)外呼系統(tǒng) 哈爾濱400電話去哪辦理

前言

我們將應用以Docker容器的方式部署到服務器上的時候,通常需要考慮兩個方面的的問題:網(wǎng)絡和存儲。

網(wǎng)絡方面,有些應用需要占用端口,而其中一部分應用甚至需要對外提供訪問。

出于安全方面考慮,代理轉(zhuǎn)發(fā)方式相對于直接開放防火墻端口方式更為合適。

存儲方面,由于容器內(nèi)部并不適合做數(shù)據(jù)持久化,所以一般通過掛載卷的方式將數(shù)據(jù)保存在服務器磁盤上。

但是服務器也不能保證絕對安全,所以數(shù)據(jù)也需要備份到云上。

代理轉(zhuǎn)發(fā)

默認情況下容器之間的網(wǎng)絡是互相隔離的,但是對于一些有關(guān)聯(lián)的應用而言(web前端容器和服務端容器以及數(shù)據(jù)庫容器),一般會把它們劃分到一個獨立的橋接子網(wǎng)絡(以下簡稱子網(wǎng)),使得這些容器之間可以相互通信,但同時又與外部進行隔離。

對于需要對子網(wǎng)外部提供訪問的容器,可以將端口映射到服務器主機上。整個結(jié)構(gòu)大致如下:


上面的端口映射只解決了服務器(宿主機)訪問容器網(wǎng)絡服務的問題,如果我們要從本地機器上通過因特網(wǎng)訪問服務器上的容器,一般是不行的,因為服務器除了安全考慮,默認情況下會啟用防火墻,并只開放22等少數(shù)幾個端口。

對于傳統(tǒng)的網(wǎng)絡進程,實現(xiàn)方式就是通過反向代理服務器來對網(wǎng)絡請求進行轉(zhuǎn)發(fā),比如使用Nginx配置如下代理:

# 針對不同路徑進行轉(zhuǎn)發(fā)
server {
 listen  80;               
 server_name www.xx.com;            

 location /a {
  proxy_pass localhost:1234;
 }
 location /b {
  proxy_pass localhost:2234;
 }
}
# 針對不同域名進行轉(zhuǎn)發(fā)
server {
 listen  80;               
 server_name www.yy.com;            

 location / {
  proxy_pass localhost:1234;
 }
}

那么此時問題似乎是解決了,但是如果Nginx也是在容器中運行呢?

剛才我們提到子網(wǎng)對于外部的容器是隔離的,那么Nginx容器將無法訪問這些對外服務。

你可能很容想到把Nginx容器劃分到對應的子網(wǎng)絡這種方式,容器的確支持多個子網(wǎng)的配置,但是這種操作方式的麻煩在于,每次新增子網(wǎng)時都需要修改Nginx容器的網(wǎng)絡配置并重啟容器。

所以比較好的方式是將Nginx設置為HOST網(wǎng)絡模式。放棄Nginx容器與服務器的隔離性,直接與服務器共享網(wǎng)絡和端口。那么Nginx容器即可直接訪問所有映射了端口的容器。

如下圖所示:


數(shù)據(jù)備份

應用場景

考慮到速度和安全性方面的問題,通常公司會有一些只供內(nèi)網(wǎng)訪問的服務器。但是這些服務器上的數(shù)據(jù)包括服務器本身都是隨時可能被修改或者發(fā)生故障的。

所以數(shù)據(jù)備份顯得尤為重要。這里我們討論體積較小的數(shù)據(jù)備份。

以我最近為團隊搭建的知識庫服務器為例。

該web應用是一個小型的python服務,以容器的形式部署在內(nèi)網(wǎng)服務器上,支持在線編輯功能,以md文件的形式保存數(shù)據(jù)。

因為容器一旦發(fā)生故障則內(nèi)部數(shù)據(jù)無法再訪問,所以直接放在容器中肯定是不安全的,只能通過掛載文件的方式讓容器和服務器共享數(shù)據(jù)讀寫。

那么通過什么方式對數(shù)據(jù)進行備份呢?這里我們選擇GitHub的私有倉庫來進行保存。原因有3個:

  • 安全。數(shù)據(jù)不容易丟失和竊取。
  • 方便,只需要通過git命令即可備份。
  • 快速。由于備份的數(shù)據(jù)體積和數(shù)量并不大。

雖然方式已經(jīng)確定,但要實現(xiàn)還有兩個問題:

  • 向GitHub倉庫需要進行權(quán)限認證。
  • 如何定時或自動提交數(shù)據(jù)到GitHub。

實現(xiàn)方法

首先按照容器單一指責的原則,我們應該創(chuàng)建一個新的容器用來執(zhí)行備份任務。

這里我們我可以使用docker-compose或者其它編排工具來創(chuàng)建多個容器。

然后就是權(quán)限認證,在本機創(chuàng)建ssh key并加入到GitHub的設置中,這樣使得容器可以推送文件到對應倉庫。

不過現(xiàn)在只是服務器可以推送代碼,容器還不行,所以還需要將.ssh文件拷貝到容器中。

最后是自動備份的實現(xiàn),比較好的方式是每次文件有變動的時候提交并推送代碼,但是目前并沒有找到在容器中監(jiān)聽文件的簡單方式,所以退而求其次,采用定時任務的策略,即每隔5分鐘執(zhí)行對應的git命令來提交和推送文件到倉庫。

這里可以使用基于鏡像busybox封裝的輕量級的容器,將項目代碼掛載到容器中保證文件的同步更新,然后啟動cron服務來實現(xiàn)操作。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

標簽:西藏 巴中 湘潭 阜陽 珠海 張家口 開封 襄陽

巨人網(wǎng)絡通訊聲明:本文標題《如何利用Docker容器實現(xiàn)代理轉(zhuǎn)發(fā)與數(shù)據(jù)備份詳解》,本文關(guān)鍵詞  如何,利用,Docker,容器,實現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《如何利用Docker容器實現(xiàn)代理轉(zhuǎn)發(fā)與數(shù)據(jù)備份詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于如何利用Docker容器實現(xiàn)代理轉(zhuǎn)發(fā)與數(shù)據(jù)備份詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    襄垣县| 宣城市| 卢氏县| 佳木斯市| 乌什县| 松江区| 葫芦岛市| 五华县| 正安县| 灵山县| 子长县| 汶川县| 永春县| 土默特左旗| 扬州市| 偃师市| 深州市| 陆丰市| 将乐县| 扶绥县| 乐都县| 德惠市| 越西县| 蚌埠市| 岱山县| 丽江市| 夹江县| 德钦县| 江津市| 永川市| 崇阳县| 吉木萨尔县| 新昌县| 鄂托克前旗| 秦皇岛市| 会宁县| 蓬溪县| 新绛县| 登封市| 灵台县| 河北区|