本文介紹瞭如何使用Docker容器來減小新員工入職加入團隊的準備啓動時間的五個方法,包括Docker容器是惟一的依賴、容易知道如何構建環境、跨機器的便攜性、一致性的開發環境以及輕量級的環境。php
不管公司規模大小,加入新的開發者而且想要讓其儘快達到可以幹活的程度,仍然是一個顯著的挑戰。新開發者被僱傭和生產(做者所謂的生產能夠看「注1」)的時間越長,須要耗費的時間就越長,尤爲是一些經驗豐富的開發者。html
鑑於此,有效的入職工做流程有兩個須要考慮關鍵的問題:nginx
· 如何將重新人坐下到熟悉項目的時間縮短到儘量小?docker
· 新員工如何儘快進入狀態?shell
實際上,一個更好的問題是:不管開發人員是剛剛到公司仍是剛剛接觸一個項目,咱們該如何讓他們儘快熟悉項目並進行開發?數據庫
*注【1】:本文中,所謂生產能夠理解爲添加新功能,修復現有bug,或者可以調研安裝開發過程須要用到的代碼庫。緩存
有不少技術能夠用來解決上述問題,包括shell腳本、WAMP、MAMP和LAMP 堆棧技術以及虛擬機,可是我發現最引人注目的是Docker。Docker是DevOps世界中衆所周知的新生兒,它最新的一系列技術,旨在使項目可以從開發環境平滑地過濾到生產環境。服務器
固然,Docker可以讓你比較容易接觸新技術,而且讓你以爲它無所不能。 然而,Docker真的特別擅長減小新開發人員的新人時間(從入職到能幹活)。今天,我將介紹Docker能夠顯着減小新員工熟悉項目時間的五個方面。app
Docker是惟一的依賴框架
若是你已經作開發至少五年,你應該熟悉一系列用於構建開發環境的方法。
最初,有(L,W,M)AMP堆棧,可讓開發人員的機器包含各類開發庫和依賴包。雖然對於一些項目是頗有用的,可是這種方法每每會致使機器迅速變得凌亂。特別是在不一樣的項目須要不一樣版本的相同開發庫(例如加密,字符串處理,數字處理或SSL)的時候。
開發機器也可能會被迅速填滿大量安裝包,以及一系列配置。 所以,幾乎不可能在生產環境中或在任何其餘地方從新構建相同的環境。相反,這又將致使不良的「爲我所用」的效應。
有了Docker,這不就再是一個問題。 在Docker Hub上擁有一系列預配置的Docker容器,能夠知足各類開發需求。好比說,若是你正在建立一個Ruby app,能夠從Docker Hub上拉取一個Ruby容器。若是您要建立Go或Python app,能夠拉取Go或Python容器。更進一步,若是你正在建立一個基於框架的應用程序,例如Zend Expressive for PHP,你能夠從Docker Hub上拉取相應的容器配置。
若是應用程序的需求更多,你能夠先肯定相關的需求,而後構建一個自定義的容器配置,組裝必要的容器來知足這些需求。若是你構建了自定義容器,而Docker Hub上尚未這種容器,你能夠考慮把容器上傳,以便其餘人也可使用它。
不管你的需求是什麼,使用Docker後,開發機器再也不須要安裝各類不一樣類型的開發庫,軟件包或配置。這樣,開發機將變得更加輕量、更加乾淨,而不是由於一堆的依賴變得臃腫。開發人員也不會再逃避責任,總覺得機器「爲我所用」。
Docker很容易讓你知道如何構建環境
讓咱們看看Docker如何簡化配置需求。長期以來,虛擬機是配置開發環境的最佳工具。經過使用基於VirtualBox、Parallels和VMWare等工具建立的虛擬機,開發環境能夠構建成與測試,暫存,生產或任何其餘環境徹底相同。在這些環境中,你能夠模擬代碼被託管的方式。
然而,虛擬機與在裸機硬件上運行的機器沒有什麼不一樣。全部的軟件,庫,擴展和依賴仍然須要安裝和配置。所以,構建它們的時間仍然不是小任務,而且爲不一樣的項目複製它們也不簡單。所以,你須要使用Vagrant、Puppet、Chef、Salt和Ansible等工具來解決這個問題。這些工具能夠建立可複製和可版本化的配置腳本,經過這些腳本能夠在任何環境上構建相同的虛擬機。
可是,無論選擇哪一種配置工具,都須要花費不少時間來學習。有些工具甚至須要花費更長的時間來學習,即便是最簡單的一款工具(Ansible),想要建立配置,用以構建一個具有緩存、日誌、郵件和數據庫等功能的PHP應用程序仍是要花費很多的時間。最近我就建立了一個這樣的項目,配置開發,測試和生產環境包括了15個目錄和34個文件。
而後就是資源利用率的問題。假設你須要在生產環境的不一樣機器上部署Web、數據庫、隊列和緩存服務器,你至少在開發環境中準備四個虛擬機進行開發,而後將他們組裝在一塊兒造成完整的服務,而每一臺每一個虛擬機都須要分配內存、CPU和驅動器空間。
經過Docker,這些事情會變得容易,你不須要花太多時間設置全部環境。使用Docker Compose,根據你應用程序的需求,配置可能以下:
version: '2'
services:
nginx:
image: nginx
ports:
- 8080:80
volumes:
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
volumes_from:
- php
php:
build: ./docker/php/
expose:
- 9000
volumes:
- .:/var/www/html
這裏咱們爲PHP應用程序構建了一個環境,有兩個容器,一個運行NGINX,一個經過FPM運行PHP。這與Ansible或Puppet配置造成鮮明對比。使用Ansible或Puppet,你必須指定全部必需的依賴包。而使用Docker,你只須要一個容器之間能共享的基礎鏡像,而後添加你須要的東西。
因爲咱們只須要兩個組件來運行應用程序,咱們就只須要關心這兩個組件。 所以,使用Docker有如下幾個好處:
· 咱們沒必要關心全部相關的二進制文件。
· 配置很是簡單明瞭。
· 學習時間大大減小。
若是有人歷來沒有接觸過Docker,不要緊,我建議他們能夠花20到30分鐘學習下Docker,充分了解Docker的原理以及配置方式,例如文件在容器中所處的位置等等。不須要進行冗長的培訓課程,他們也沒必要成爲DevOps大師,若是須要的話,他們本身就能夠進行配置更改。
經過將一組現有容器鏈接在一塊兒並提供所需的額外配置,能夠很是快速地建立容器配置。所以,DevOps能夠很是快地建立開發環境配置,而不是花費過多的時間在其餘技術上。
跨機器可移植性
在許多方面,Docker能夠根本上解決可移植性問題,即便在Windows和Mac上也是如此。
Docker如今使用的只有Linux技術,它基於Linux容器(LXC)、cgroups和內核命名空間,默認狀況下,Mac和Windows沒法運行Docker。2014年,微軟宣佈初步支持改進Windows Server,以即可以支持Docker。然而,我不知道在寫這篇文章的時候,這種改進是否已經完成或者蘋果是否有相似的這種支持。
儘管如此,Docker仍然能夠在兩個平臺上運行,分別經過Docker for Windows和Docker for Mac。這些包提供了一個Linux基礎庫,能夠在其上運行Docker。基於這些改變和軟件包,不管開發人員使用哪一種平臺,他們均可以利用Docker配置文件和相關工具快速搭建工做所需的全部環境。
考慮到配置文件是一個或一系列的文本文件,經過文本編輯器就能夠進行維護,而文本編輯器在全部主流操做系統中都存在,這使得配置文件易於在版本控制下進行存儲。
我知道,可能有些IT企業的政策是限制使用某些操做系統。然而,這一般是一個很差的選擇。因爲Docker適用於全部主要平臺,所以沒有理由限制開發人員選擇想用的操做系統。
跨開發環境一致性
這是我真正喜歡的一個好處,也是我在使用虛擬機時未曾體會到的。當你使用Docker容器時,能夠跨機器移動它。只要目的端機器能夠運行Docker,就沒什麼問題。你能夠將應用程序及其依賴項整合在一個容器中,並將其從一個機器移動到另外一個機器。
不管Docker運行在什麼主機上,它能夠確保不出現任何兼容性問題。這是我前段時間在構建裝有Docker的虛擬機時,想要作到可是沒有成功作到的事情。
輕量級環境
這是一個有趣的,但或許又稍有爭議的問題。Docker每一個容器只運行一個進程,所以,容器的資源需求一般不大。由於資源需求至關小,使用Docker的其餘應用均可以變得比較輕量和靈活。
舉個例子,使用Mac OS X做爲主機操做系統進行開發,並使用Docker for Mac來提供Mac和Docker之間的過渡層。當Docker for Mac啓動時,就已經完成了最長的啓動時間。
當你引導容器配置時,一般發生在幾秒鐘,而不是像虛擬機須要幾分鐘(或更長)。不管是建立一個仍是多個容器,或者啓動現有的容器,均可以在秒級完成。這和使用VirtualBox和Ansible建立或啓動一個虛擬機所耗費的配置時間或啓動時間進行比較,Docker啓動和運行的要更快。
讓咱們拿BusyBox作對比,BusyBox是一個微小的Linux發行版,只有5mb大,能夠用它來構建虛擬機。通常使用BusyBox都是由於它比較輕量和靈活,但考慮到虛擬機和Docker的工做方式,Docker仍然會更快地開始運行。
我確實作了一些普遍的歸納,但我並非要說VirtualBox、Vagrant、Ansible或任何其餘虛擬機工具很差。我已經使用這些工具好久了,而且我會繼續使用。
總結
雖然Docker仍然是一個新事物,但它不是一項新技術,它很早就被使用來構建,管理和部署應用程序。此外,它具備許多優勢,使其成爲構建開發環境的首選工具,能夠大幅縮短新加入公司、部門或項目等開發人員熟悉項目的時間。
若是你尚未使用過Docker,我強烈推薦你去試一試。若是你想進行嘗試,你能夠從Codeship網站的"request a 14-day trial"着手,它將教會你如何減小開發成本以及快速構建應用程序。快去試一試Docker,看看它如何可以幫助你作得更好。
文章來源:DockOne