Docker使用過程中可能遇到的問題
原創(chuàng)Docker并不是一個新的技術(shù),容器化也不是,早在2006年就陸續(xù)出現(xiàn)了LXC, OpenVZ,Jail等容器虛擬化技術(shù),但是為什么Docker卻能異軍突起呢?Docker的核心是基于 Linux的CGroup、Namespace和LayeredFS技術(shù),通過資源的控制、隔離和對鏡像的分層處理,是Docker容器能夠?qū)?yīng)用程序和運(yùn)行環(huán)境打包到一起,這樣就可以Build, Ship And Run anywhere。與其說是Docker火,不如說是其天生的輕量級屬性,正好迎合了云計算大行其道的今天。因此,筆者認(rèn)為Docker改變整個云計算和互聯(lián)網(wǎng)的格局是遲早的事,但是Docker在使用中,特別是在國內(nèi),又有什么需要注意的問題呢?
1. 編譯
Docker雖然說是一個開源的項目,但是如果你要在國內(nèi)成功編譯它是一件非常困難的事情。Docker是用Go來開發(fā)的,Go被譽(yù)為互聯(lián)網(wǎng)時代的C語言,由google主導(dǎo)開發(fā),它的開發(fā)者包括了 Chrome V8引擎和Unix的開發(fā)者,因此它天生就是易用且簡介的。它具有良好的包管理、簡介的語法和非常好的靈活性。但是,在國內(nèi)很多package,你是不一定能夠取下來的,這樣就導(dǎo)致編譯過程很難進(jìn)行。
2. 安裝
如果你在國外,沒有GFW的限制,擁有非常好的網(wǎng)速,你使用Docker就像是在開一輛跑車。但如果你在國內(nèi),就好比是開了一輛沒油的跑車。我曾經(jīng)很多次遇到了安裝失敗的問題,而且安裝速度非常緩慢。同時,如果你要在全封閉的內(nèi)網(wǎng)安裝Docker就更麻煩,你需要將所有的安裝包完整遷移到內(nèi)網(wǎng),這個工作量是非常大的。下面就是一個官方安裝失敗的例子:
- root@ghostcloud:~# curl -fsSL https://get.docker.com/ | sh
- apparmor is enabled in the kernel and apparmor utils were already installed
- + sh -c apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
- Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --homedir /tmp/tmp.cr8hxY45Ve --no-auto-check-trustdb --trust-model always --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
- gpg: requesting key 2C52609D from hkp server p80.pool.sks-keyservers.net
- ?: p80.pool.sks-keyservers.net: Host not found
- gpgkeys: HTTP fetch error 7: couldn't connect: Success
- gpg: no valid OpenPGP data found.
- gpg: Total number processed: 0
3. 鏡像pull非常慢
Docker為什么火,有一個重要的原因就是它開創(chuàng)性的分層鏡像機(jī)制,你的環(huán)境和應(yīng)用程序都會被打包到鏡像中。但是,一個比較大的問題是,Docker所有的鏡像都依賴于基礎(chǔ)鏡像,而這些基礎(chǔ)鏡像都在國外的docker hub上,當(dāng)你興致勃勃準(zhǔn)備用docker大干一場時,pull的漫長等待一定會讓你很抓狂,而最后的超時失敗,更會讓你有說臟話的沖動。
4. 鏡像存儲
Dockerhub在國外這個問題還好,但是默認(rèn)的dockerhub所有鏡像都是公開的,就是說你的鏡像別人都能夠下載。這個策略跟github是一樣的,如果你要用免費(fèi)的,那么你就得開源。否則,給錢買私有倉庫吧。Docker的私有倉庫價格是非常貴的,而且速度還很慢。你不可能需要共享鏡像時,都push到國外,再pull回來吧。當(dāng)然有的人可能要說,我可以搭建私有倉庫。不過私有倉庫僅時候企業(yè)內(nèi)部私有網(wǎng)絡(luò)使用,而且沒有基礎(chǔ)鏡像,如果你有跨區(qū)域的使用,是非常難處理的。
5. 云端的部署問題
至少在我寫這篇文章的時候,不是每一家公有云廠商的基礎(chǔ)鏡像都能順利的安裝docker,docker是輕量級的虛擬化技術(shù)不假,但它仍然不能在短期內(nèi)替代VM。如果你要在VM上使用docker,需要對網(wǎng)絡(luò)、存儲等做一些特殊的處理。
6. 容器和主機(jī)的管理
Docker是輕量級的不假,但是隨著輕量以后,勢必會出現(xiàn)大量的容器和主機(jī)。本身使用docker的出發(fā)點(diǎn)是降低運(yùn)維成本,提升效率,但是管理上的成本相反卻會上升。主機(jī)的監(jiān)控、容器的監(jiān)控、容器和容器之間的聯(lián)系等等,都需要專業(yè)的公司來處理。很多人可能會想,我可以使用kubernetes,mesos等開源框架,不過我想給你敲一個警鐘,如果你沒有10人以上的運(yùn)維團(tuán)隊,最好不要去碰這類框架。這類框架設(shè)計之初就是管理成千上萬臺的主機(jī),如果你沒有這么大的量,一定會讓你日后的維護(hù)非常的酸爽。
7. 容器的性能
容器有性能損失嗎?如果你要將系統(tǒng)搬遷到docker上,你是否會有擔(dān)憂?CPU、內(nèi)存、磁盤IO的性能到底如何?如何進(jìn)行優(yōu)化?這些都是需要大量測試和優(yōu)化的。
8. 容器的安全
容器到底安全嗎?容器是操作系統(tǒng)級的虛擬化技術(shù),多個容器實(shí)際是共享了操作系統(tǒng)內(nèi)核。容器的安全一直在不斷的向前發(fā)展,但是你必須要了解容器可能受攻擊的面有多大,如何來進(jìn)行避免。
9. 網(wǎng)絡(luò)問題
容器本身支持多達(dá)5種網(wǎng)絡(luò)模式,默認(rèn)的方式只是非常基礎(chǔ)的簡單應(yīng)用,對于您的實(shí)際環(huán)境,則需要專門的特殊處理,才能是網(wǎng)絡(luò)性能達(dá)到最優(yōu)化。
10. 容器型運(yùn)維人員短缺
目前國內(nèi)對linux比較熟悉的運(yùn)維都是供不應(yīng)求,而容器是建立在linux之上的,誠然容器可以提升開發(fā)、測試和運(yùn)維的效率,但是這是建立在你有懂docker的運(yùn)維的人員。據(jù)我所知,目前國內(nèi)對docker很熟悉的運(yùn)維人員非常少,docker的一手資料基本都是英文的,對英文非常熟悉的運(yùn)維人員并不多。
對于上面的問題,其中的每一條都可能延伸出來很長的篇幅,這些都是筆者在實(shí)際開發(fā)和應(yīng)用中遇到過的問題, Docker的發(fā)展速度飛航快,到現(xiàn)在已經(jīng)3年了,現(xiàn)在它已經(jīng)從一個測試-發(fā)布的工具,逐步轉(zhuǎn)變成為基礎(chǔ)架構(gòu)的組成部分,正式邁向產(chǎn)品化環(huán)境,但實(shí)際使用中依然有很多需要注意的地方。
作者介紹:晏東,精靈云(ghostcloud)聯(lián)合創(chuàng)始人,20年編程經(jīng)驗(yàn),全棧工程師,曾任索貝數(shù)碼及賽門鐵克架構(gòu)師架構(gòu)師,一直從事SAN、NAS及對象存儲等分布式系統(tǒng)研發(fā)工作。2013年開始研究LXC和Docker相關(guān)技術(shù),目前主要從事容器云平臺鏡像及倉庫方面研發(fā)工作。





















