Docker在2014年迎來了迅猛的發(fā)展,不過在年底傳出了圍繞Docker的一些聲音,聲稱容器服務(wù)基礎(chǔ)設(shè)施已達(dá)到了準(zhǔn)備用于生產(chǎn)環(huán)境的程度。今年,Gartner等調(diào)研公司已經(jīng)列出了Docker部署到企業(yè)中分布式應(yīng)用程序中的安全挑戰(zhàn),不過都相當(dāng)支持Docker總體的發(fā)展方向。新年伊始,已經(jīng)出現(xiàn)了好幾個(gè)例子,它們證明了使用容器以便持續(xù)改進(jìn)和日常部署在生產(chǎn)環(huán)境中的準(zhǔn)備就緒狀況。
用戶們的體驗(yàn)不一而足:有的用戶堅(jiān)信可以使用Docker大規(guī)模部署分布式Web應(yīng)用程序;有的用戶已把Docker整合到生產(chǎn)環(huán)境中;有的用戶決定還沒有這么做,而有的用戶則拒絕Docker,認(rèn)為它太過復(fù)雜或不夠穩(wěn)定,無法用于實(shí)際的使用場(chǎng)合。
下面不妨看一下今年的四個(gè)例子,它們證明了用戶如何考慮Docker用于生產(chǎn)環(huán)境:
Battlefy:交付新的功能特性
軟件工程師Jaime Bueza最近撰寫的一篇博文表明了初創(chuàng)公司Battlefy如何使用Docker和Jenkins工具,在其eSports平臺(tái)上發(fā)布新的功能特性時(shí),迅速構(gòu)建并發(fā)布Docker映像,然后將映像部署到AWS Elastic Beanstalk上,或者修復(fù)軟件錯(cuò)誤。在過去的五個(gè)月,Battlefy的訪客數(shù)量已從100個(gè)猛增到400000個(gè),它所在的行業(yè)預(yù)計(jì)全球收入有望增長(zhǎng)24%;國(guó)際用戶群數(shù)量已經(jīng)超過了7000萬。
Battlefy從功能特性或軟件錯(cuò)誤的GitHub合并請(qǐng)求(pull request)入手,連接到JIRA工單,然后利用測(cè)試版工具Screener來檢測(cè)每個(gè)版本的DOM變化,并將差異做入屏幕截圖。結(jié)果被發(fā)送到團(tuán)隊(duì)的Slack頻道,評(píng)審團(tuán)隊(duì)成員給代碼打上兩個(gè)大拇指表情符號(hào)后,Jenkins就向AWS S3交付新的代碼;Docker容器被用來構(gòu)建生產(chǎn)前環(huán)境。在生產(chǎn)前環(huán)境中完成另一輪的Screener前端測(cè)試后,Jenkins隨后得以自動(dòng)將合并請(qǐng)求并入到主生產(chǎn)環(huán)境中。
Battlefy生怕遇到生產(chǎn)環(huán)境中的任何故障,于是使用AWS Elastic Beanstalk,那樣如果構(gòu)建、推送和部署的Docker映像有錯(cuò)誤,Battlefy就能迅速恢復(fù)到前一個(gè)版本。
Iron.io:在微服務(wù)環(huán)境中運(yùn)用Docker
Iron.io是IronMQ消息隊(duì)列系統(tǒng)和IronWorker異步任務(wù)處理工具的開發(fā)商,它自豪地自認(rèn)為是Docker的早期采用者;對(duì)它來說,微服務(wù)架構(gòu)已儼然成為運(yùn)行時(shí)環(huán)境的標(biāo)準(zhǔn)化模式。
在近日的一篇博文中,渠道和整合主管Ivan Dwyer解釋,對(duì)Iron.io來說,它們之所以能避免生產(chǎn)環(huán)境在安全、發(fā)現(xiàn)和故障方面的重大挑戰(zhàn),就是因?yàn)樗鼈冊(cè)谌萜鲗用姘袲ocker整合到系統(tǒng)中:
“我們把每一個(gè)任務(wù)容器視作一種暫時(shí)的計(jì)算資源。持續(xù)性、冗余性和可用性,我們?cè)诜?wù)層面擴(kuò)建產(chǎn)品時(shí)非常注重這一切要素,未必適用于單個(gè)的任務(wù)容器層面。我們?cè)谶@方面關(guān)注的問題實(shí)際上局限于確保本該運(yùn)行時(shí)運(yùn)行,好讓我們確信如今在充分利用Docker。”
IronWorker在塊存儲(chǔ)系統(tǒng)中擁有超過15套的Docker映像,它們?yōu)檫\(yùn)行中的代碼提供了語言和庫(kù)環(huán)境。IronWorker的客戶隨后只能利用編寫代碼所需的庫(kù),并上傳到Iron.io的S3文件存儲(chǔ)環(huán)境,他們的消息隊(duì)列將底層的Docker映像與用戶的代碼程序包在新的容器里面合并起來,運(yùn)行進(jìn)程,然后銷毀容器。
Iron.io在微服務(wù)環(huán)境下工作,許多遺留的企業(yè)生產(chǎn)環(huán)境無法使用這種環(huán)境,因?yàn)樗鼈兊目山M合性根本不如Iron.io支持的環(huán)境。但是就較新的應(yīng)用開發(fā)環(huán)境而言,Iron.io可以在生產(chǎn)環(huán)境中使用Docker,幫助最終用戶管理成本,并且根據(jù)需要在編排基礎(chǔ)設(shè)施里面擴(kuò)展進(jìn)程。
Mikamai:開發(fā)公司期望Docker與Opsworks一并部署
來自開發(fā)商Mikamai的開發(fā)人員Giovanni Intini總結(jié)了許多成熟的開發(fā)人員在Docker方面的幾個(gè)常見問題:乍一看,大家都喜歡這個(gè)概念;他們也喜歡其潛力。不過他們也都有過前車之鑒,不敢過于倉(cāng)促地采用新技術(shù),因?yàn)槟菢訒?huì)導(dǎo)致他們?cè)诓渴鸬缴a(chǎn)環(huán)境后不得不通宵達(dá)旦地工作或者放棄為期三天的周末。對(duì)二十出頭的編程新手來說,這可能很好玩;但是對(duì)于三四十歲的人來說,工作不是生活的全部,在生產(chǎn)就緒的環(huán)境中采用新技術(shù)面臨的風(fēng)險(xiǎn)是更重大的決定性因素。
Intini仍然看好Docker的潛力;由于基于云的開發(fā)運(yùn)維(DevOps)生態(tài)系統(tǒng)還沒有足夠成熟起來,他構(gòu)建了一些新的開源項(xiàng)目,以便使用亞馬遜的Opsworks(目前還無法支持Docker)等既有服務(wù),能夠?qū)ocker化的容器服務(wù)部署到生產(chǎn)環(huán)境中。
Intini的應(yīng)用架構(gòu)需要負(fù)載均衡系統(tǒng)、前端Web服務(wù)器、避免任何故障時(shí)間的haproxy、應(yīng)用容器、Redis、PostgreSQL、計(jì)劃任務(wù)(cron)和異步處理。他想把將其應(yīng)用程序構(gòu)建成具有可擴(kuò)展性的docker化的應(yīng)用程序。問題在于,當(dāng)他開發(fā)的應(yīng)用程序在亞馬遜網(wǎng)絡(luò)服務(wù)云上運(yùn)行時(shí),Docker其實(shí)并不是一種選擇。Intini在近日的博文中分享了用來構(gòu)建擴(kuò)展其應(yīng)用程序的生產(chǎn)就緒的環(huán)境的代碼和進(jìn)程,現(xiàn)在他聲稱其應(yīng)用程序在部署環(huán)境中的停運(yùn)時(shí)間為零。
XMLDirector:反對(duì)使用Docker
Andreas Jung是XMLDirector的項(xiàng)目負(fù)責(zé)人,而XMLDirector是一個(gè)XML內(nèi)容管理系統(tǒng)和工作流平臺(tái),旨在支持企業(yè)XML環(huán)境,其工具可以轉(zhuǎn)換發(fā)布格式以及管理文檔集合。
兩周前,他撰文描述了如何試圖在生產(chǎn)環(huán)境中使用Docker,將特定的XML類型數(shù)據(jù)庫(kù)放入到容器中,以便它們可以迅速地安裝和管理;將Plone企業(yè)內(nèi)容管理系統(tǒng)應(yīng)用程序放入到容器中,以便它可以用于XML Director的演示;以及將眾多XML特有的數(shù)據(jù)庫(kù)放入到容器中,以便它們可用于對(duì)照處理其他XML數(shù)據(jù)庫(kù)后端的方法,測(cè)試XML Director的后端。
可惜Docker沒有給Jung留下深刻的印象。他發(fā)現(xiàn),通常的構(gòu)建過程比使用外殼還要慢5倍至10倍;幾個(gè)進(jìn)程需要重啟Docker;由于Docker創(chuàng)建多個(gè)映像和容器,測(cè)試后刪除系統(tǒng)上的副本需要一番“搗鼓”。
試圖使用Docker無果后,Jung只好回到“老式的部署環(huán)境”,盡管他也承認(rèn)Docker背后的理論和概念確實(shí)不錯(cuò)(不過他表示“Docker的架構(gòu)和實(shí)施一團(tuán)糟。Docker在生產(chǎn)環(huán)境中完全不穩(wěn)定。它不可靠,無法預(yù)測(cè),靠不住。”)
準(zhǔn)備好用于生產(chǎn)環(huán)境嗎?視情況而定
Docker已得到了巨大的發(fā)展,生態(tài)系統(tǒng)在不斷擴(kuò)大,而且容器化系統(tǒng)在金融機(jī)構(gòu)、媒體及其他大規(guī)模跨國(guó)企業(yè)領(lǐng)域當(dāng)中得到了采用。雖然Docker的容器技術(shù)迅速被認(rèn)為是構(gòu)建投入到生產(chǎn)環(huán)境的分布式應(yīng)用程序的標(biāo)準(zhǔn),但早期采用者發(fā)覺它最適合這種使用場(chǎng)合:企業(yè)已經(jīng)深思熟慮了如何為其應(yīng)用程序構(gòu)建微服務(wù)架構(gòu)。