如果你是網頁工程師,很可能你對Docker已經有所耳聞,并對它的近況略知一二。Docker現在炙手可熱,筆者認為是時候開始考慮把你的網頁應用移植到Docker中去了。但是Docker的原理跟網頁開發中的技術相差甚遠,理解Docker并不是特別容易。所以本文目的就是幫助網頁工程師們認識什么是Docker,以為它在網頁開發中能幫助解決哪些實際問題。
什么是Docker?
Docker是一個開源的工具,它能夠讓容器互不干擾地運行在Linux上,并且可以快速地在容器內部署應用。Docker可以讓任何應用運行在可移植的,隔離的容器上。開發人員開發和測試時在個人電腦上使用的容器可以無縫運行在如虛擬機,云等其他正式的運維環境下。
使用容器,你可以靈活的部署你的網頁應用。你可以把你的應用運行在不同的容器上,比如讓MySQL,Apache和WordPress各運行在一個容器上,也可以把這三個應用運行在一個容器上。一個容器上運行幾個應用,因需而定,沒有絕對的好與壞,對與錯。
Docker 容器 VS 虛擬機
把應用從底層linux操作系統中隔離出來,是個很奇妙的事情。雖然容器不能替代虛擬機,但是比較容器與虛擬機的異同,還是很有意義的。虛擬機是虛擬一個完整的操作系統,包括獨立的內存管理,設備驅動等。相反,容器則是共享主機的這些資源,因此容器是比較容易管理的。
容器 &容器即服務
容器其實已經存在了一段時間了,但是它一直都沒有成為行業標準。Docker的出現,使之成為了可能,因為Docker容易學習和使用,并且提供廣泛的技術支持。
Docker是基于LXC(Linux容器)實現的,但是它并不是要替代LXC的。相反,Docker則是基于LXC提供一些高級的功能,比如版本化應用,跨主機部署可遷移的應用。如果您想了解更多關于Docker與LXC的關系,請參考stackoverflow thread。
容器即服務的業務發展很迅速。2015年初,Docker公司發布如下所示的信息圖,圖中有關于Docker容器鏡像下載量以及運行在Docker容器上的應用數量等信息。
Docker在網頁開發中的實際用例
Docker從一開始就被設計成是可以在不同的場景下應用的。除了docker.com上的那些用例,我們還可以看看下面的這些用例,無不借助于Docker所提供的強大且一致的環境。
[page]強大的Docker社區
Docker一個顯著的優點就是它提供的容器,下載下來就能使用。而且隨著社區人員的快速增長,越來越多為容器被發布出來。這些容器里包含了很多當前流行的應用如MySQL和WordPress,大家都可以拿來就用。
如果你想要跑一個WordPress的應用,你可以從Docker Hub上下載鏡像,然后簡單的跑如下命令就可以了
docker run –name some-wordpress –link some-mysql:mysql -d wordpress
對本地開發的強大支持
作為一個網頁程序員,你很有可能是在自己的電腦上開發代碼,然后再發布到運維系統上。使用Docker可以讓你開發環境和最終的上線環境保持一致,避免因為上線系統配置的不同還要在最后時刻修改代碼的尷尬。
在本地開發中使用Docker容器,可以極大提供軟件開發效率,避免最后時刻因運行系統配置的不同而帶來的麻煩。
快速部署
在過去的幾十年里,從硬件部署的幾天到虛機部署幾分鐘再到容器部署的幾秒鐘,快速部署一直在發生著日新月異的變化。
使用Docker,你可以在短短幾秒之內就能讓應用啟動并運行起來。因為創建容器不需要重新啟動操作系統,所以使用容器運行應用的確節省時間。
應用隔離所帶來的安全沙盒化
在Docker中,一個容器其實是跑了一個應用或者一個進程。每個容器都有自己單獨的運行時環境,它有自己獨立的進程空間,而且能夠接收發送到容器的網絡數據。
如果你需要安裝不同版本的python或者其他軟件庫,Docker 容器是你應該考慮的。你可以在不同的容器上安裝不同版本的軟件庫,這樣你就可以避免不同版本的軟件庫安裝在同一主機上所帶來的麻煩。
容器帶來的安全性
把不同應用運行在不同的容器上,可以提高系統的安全性。因為每個容器只能訪問其他容器顯式暴露出來的端口和文件。 而且容器可以再更高層次上對于系統上存儲什么數據,安裝什么軟件進行控制。一些運行在一個容器上可疑腳本是不會影響其他容器的。
更新是一個重要的安全隱患,把應用運行在容器上可以讓更新過程容易一些。
簡化測試
用Docker容器來搭建測試環境是非常容易的。想想那些不同的框架,數據庫以及不同版本的python,在虛擬環境下測試時非常具有挑戰的。
使用Docker容器進行測試,把不同版本的應用運行在不同的容器上,可以極大地加快測試速度。
簡單配置
Docker容器越來越廣泛的被應用有著許多原因,但是簡單快速部署絕對是其中重要的一個。把應用運行在虛擬機上,可以把應用所需的配置從基礎設施里隔離出來。Docker也提供相同的功能,卻沒有虛擬機那樣大的開銷。不過Docker并不能替代虛擬機,它們有各自的使用領域。
容器化你的網頁應用
容器化你的網頁應用不僅可以加快部署,還可以讓部署變得更容易。Docker容器極具可移植性及靈活性,作為一個網頁開發工程師,你可以借助docker讓你的開發環境更加強勁。