技術(shù)領(lǐng)域
本發(fā)明涉及一種計算機軟件應(yīng)用的技術(shù),具體地說是一種基于Docker容器創(chuàng)建的應(yīng)用的域名配置方法。
背景技術(shù):
Docker是PaaS提供商 dotCloud 開源的一個基于LXC的高級容器引擎,源代碼托管在Github上, 基于go語言并遵從Apache2.0協(xié)議開源。Docker 使用客戶端-服務(wù)器 (C/S) 架構(gòu)模式,使用遠程API來管理和創(chuàng)建Docker容器。Docker 容器通過 Docker 鏡像來創(chuàng)建。容器與鏡像的關(guān)系類似于面向?qū)ο缶幊讨械膶ο笈c類。Docker是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的Linux機器上,也可以實現(xiàn)虛擬化。基于Linux Bridge和Namespace可以實現(xiàn)Docker容器使用同主機的本地網(wǎng)絡(luò),使得外部網(wǎng)絡(luò)與Docker容器可以方便地進行相互訪問。整個框架分為服務(wù)端和客戶端,它們通過RESTful URL的形式實現(xiàn)通信。
申請?zhí)枮镃N201510375226.4,申請名稱為:基于Docker的配置管理方式及裝置。公開了一種基于Docker的配置管理方式,應(yīng)用于包括多個容器的Docker運行環(huán)境中,包括:獲取Docker運行環(huán)境中的多個容器的配置需求;確定與配置需求相應(yīng)的底層系統(tǒng)命令;依據(jù)配置需求并調(diào)用底層系統(tǒng)命令來對Docker運行環(huán)境中的多個容器進行配置管理。解決了原生Docker對其內(nèi)部虛擬化的容器的配置管理方式不完善的問題。
Docker是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的Linux機器上,也可以實現(xiàn)虛擬化。Docker目前存在多種網(wǎng)絡(luò)模式,包含Bridge模式、Host模式、OverLay模式,但是這些網(wǎng)絡(luò)模式都存在這類似的問題:容器的IP無法固定,每當容器重啟時,Docker會隨機選取沒有被使用的IP配置給該容器,保持應(yīng)用的訪問地址固定不變,是對業(yè)務(wù)系統(tǒng)的基本要求。
基于Docker創(chuàng)建的容器,存在以下三個問題:1、容器獲取的IP一般為內(nèi)部IP,無法被外部訪問。2、容器重啟后IP變化,其他容器實例或者應(yīng)用實例無法感知該容器的IP變化,導致業(yè)務(wù)中斷。3、若應(yīng)用對外提供訪問服務(wù),需要配置單獨的負載均衡軟件,該應(yīng)用為多個容器實例時,配置更新負載均衡軟件變得復雜。
技術(shù)實現(xiàn)要素:
本發(fā)明的技術(shù)任務(wù)是提供一種基于Docker容器創(chuàng)建的應(yīng)用的域名配置方法,來解決基于Docker容器創(chuàng)建的應(yīng)用重啟或者重建時,該應(yīng)用的域名變化導致業(yè)務(wù)中斷的問題。
本發(fā)明的技術(shù)任務(wù)是按以下方式實現(xiàn)的,
一種基于Docker容器創(chuàng)建的應(yīng)用的域名配置方法,當部署的應(yīng)用是由多個Docker容器創(chuàng)建時,使用該方法為各應(yīng)用進行域名配置,步驟如下:
(1)、系統(tǒng)初始化,宿主機部署 Agent,Agent用于監(jiān)聽Docker事件和上報消息到服務(wù)端;服務(wù)端部署Docker集群管理軟件:Haproxy、SkyDNs和Etcd,能夠接受并處理Agent上報的信息;
(2)、創(chuàng)建應(yīng)用:
a、下發(fā)創(chuàng)建應(yīng)用的請求時,服務(wù)端提取數(shù)據(jù):應(yīng)用的域名、Docker容器配置參數(shù)和容器數(shù)量,同時服務(wù)端為該應(yīng)用分配域名參數(shù),服務(wù)端首先下發(fā)創(chuàng)建容器的請求,服務(wù)端完成數(shù)據(jù)解析,通過內(nèi)置的調(diào)度算法,在指定的多個宿主機上創(chuàng)建屬于該應(yīng)用的Docker容器;
b、當宿主機上的該應(yīng)用的Docker容器創(chuàng)建完成并啟動成功后,部署在宿主機的Agent 會接收到Docker容器上報的容器啟動事件,Agent解析該容器啟動事件并將該容器啟動事件的內(nèi)容上報到服務(wù)端;
c、服務(wù)端解析該容器啟動事件,將Docker容器的IP和應(yīng)用的域名參數(shù)保存到Etcd數(shù)據(jù)庫,同時將Docker容器和應(yīng)用對應(yīng)關(guān)系保存到Haproxy,并重載Haproxy,SkyDns獲取Etcd數(shù)據(jù)庫內(nèi)的數(shù)據(jù),完成應(yīng)用的域名解析;
(3)、當訪問應(yīng)用時,訪問地址為應(yīng)用的域名,配置DNS 地址為SkyDns的地址, SkyDns完成域名解析,從而能夠訪問實際的Docker容器地址。
步驟(1)中,系統(tǒng)初始化后,宿主機信息匯總,宿主機Agent運行。
當應(yīng)用對應(yīng)的Docker容器重啟、刪除或停止時,Agent均會上報Docker容器狀態(tài)變化的事件到服務(wù)端,服務(wù)端更新Etcd數(shù)據(jù)庫和Haproxy配置文件,從而保證應(yīng)用被訪問的時候,能夠找到正確的容器地址。
英文名詞解析:
Agent為能自主活動的軟件或者硬件實體,通常被翻譯為"代理"。本發(fā)明中的Agent為一軟件實體,用于監(jiān)聽Docker事件和上報消息到服務(wù)端。
HAProxy提供高可用性、負載均衡以及基于TCP和HTTP應(yīng)用的代理,支持虛擬主機,它是免費、快速并且可靠的一種解決方案。HAProxy實現(xiàn)了一種事件驅(qū)動,單一進程模型,此模型支持非常大的并發(fā)連接數(shù)。HAProxy運行在當前的硬件上,完全可以支持數(shù)以萬計的并發(fā)連接。并且它的運行模式使得它可以很簡單安全的整合進當前的架構(gòu)中, 同時可以保護web服務(wù)器不被暴露到網(wǎng)絡(luò)上。
SkyDns是Kubernetes用于服務(wù)發(fā)現(xiàn)的默認開源DNS(Domain Name System,域名系統(tǒng))服務(wù),SkyDns使用Etcd作為后端存儲,具有分布式集群的特點。
Etcd是一個應(yīng)用在分布式環(huán)境下的 key/value 存儲服務(wù),可以在集群中共享信息,讀取寫入速度很快。
本發(fā)明的一種基于Docker容器創(chuàng)建的應(yīng)用的域名配置方法具有以下優(yōu)點:當應(yīng)用的多個Docker容器在啟動時,自動上報容器啟動事件到服務(wù)端、服務(wù)端進行數(shù)據(jù)解析,將多個Docker容器的域名、IP、端口信息保存到Etcd數(shù)據(jù)庫,同時在Haproxy為該應(yīng)用配置負載均衡,并將應(yīng)用的域名、IP、訪問端口配置到Etcd數(shù)據(jù)庫,SkyDns自動讀取Etcd數(shù)據(jù)庫,完成域名解析;為基于Docker容器創(chuàng)建的應(yīng)用配置持久化的域名,當應(yīng)用重啟或者重建時,該域名都保持不變;同時能夠完成應(yīng)用的負載均衡。因而,具有很好的推廣使用價值。
附圖說明
下面結(jié)合附圖對本發(fā)明進一步說明。
附圖1為一種基于Docker容器創(chuàng)建的應(yīng)用的域名配置方法的組件交互框圖;
附圖2為一種基于Docker容器創(chuàng)建的應(yīng)用的域名配置方法的流程框圖。
具體實施方式
參照說明書附圖和具體實施例對本發(fā)明的一種基于Docker容器創(chuàng)建的應(yīng)用的域名配置方法作以下詳細地說明。
實施例:
本發(fā)明的一種基于Docker容器創(chuàng)建的應(yīng)用的域名配置方法,當部署的應(yīng)用是由多個Docker容器創(chuàng)建時,使用該方法為各應(yīng)用進行域名配置,步驟如下:
(1)、系統(tǒng)初始化,宿主機部署 Agent,Agent用于監(jiān)聽Docker事件和上報消息到服務(wù)端;服務(wù)端部署Docker集群管理軟件:Haproxy、SkyDNs和Etcd,能夠接受并處理Agent上報的信息;
(2)、創(chuàng)建應(yīng)用:
a、下發(fā)創(chuàng)建應(yīng)用的請求時,服務(wù)端提取數(shù)據(jù):應(yīng)用的域名、Docker容器配置參數(shù)和容器數(shù)量,同時服務(wù)端為該應(yīng)用分配域名參數(shù),服務(wù)端首先下發(fā)創(chuàng)建容器的請求,服務(wù)端完成數(shù)據(jù)解析,通過內(nèi)置的調(diào)度算法,在指定的多個宿主機上創(chuàng)建屬于該應(yīng)用的Docker容器;
b、當宿主機上的該應(yīng)用的Docker容器創(chuàng)建完成并啟動成功后,部署在宿主機的Agent 會接收到Docker容器上報的容器啟動事件,Agent解析該容器啟動事件并將該容器啟動事件的內(nèi)容上報到服務(wù)端;
c、服務(wù)端解析該容器啟動事件,將Docker容器的IP和應(yīng)用的域名參數(shù)保存到Etcd數(shù)據(jù)庫,同時將Docker容器和應(yīng)用對應(yīng)關(guān)系保存到Haproxy,并重載Haproxy,SkyDns獲取Etcd數(shù)據(jù)庫內(nèi)的數(shù)據(jù),完成應(yīng)用的域名解析;
(3)、當訪問應(yīng)用時,訪問地址為應(yīng)用的域名,配置DNS 地址為SkyDns的地址, SkyDns完成域名解析,從而能夠訪問實際的Docker容器地址。
步驟(1)中,系統(tǒng)初始化后,宿主機信息匯總,宿主機Agent運行。
當應(yīng)用對應(yīng)的Docker容器重啟、刪除或停止時,Agent均會上報Docker容器狀態(tài)變化的事件到服務(wù)端,服務(wù)端更新Etcd數(shù)據(jù)庫和Haproxy配置文件,從而保證應(yīng)用被訪問的時候,能夠找到正確的容器地址。
通過上面具體實施方式,所述技術(shù)領(lǐng)域的技術(shù)人員可容易的實現(xiàn)本發(fā)明。但是應(yīng)當理解,本發(fā)明并不限于上述的具體實施方式。在公開的實施方式的基礎(chǔ)上,所述技術(shù)領(lǐng)域的技術(shù)人員可任意組合不同的技術(shù)特征,從而實現(xiàn)不同的技術(shù)方案。
除說明書所述的技術(shù)特征外,均為本專業(yè)技術(shù)人員的已知技術(shù)。