Docker縮短新開發者熟悉項目時間的五個方面

本文介紹瞭如何使用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

相關文章
相關標籤/搜索