為什麼80%的碼農都做不了架構師?>>>
本文介紹了如何使用docker容器來減少新員工入職加入團隊的準備啟動時間的五個方法,包括docker容器是唯一的依賴、容易知道如何構建環境、跨機器的便攜性、一致性的開發環境以及輕量級的環境。
無**司規模大小,加入新的開發者並且想要讓其盡快達到能夠幹活的程度,仍然是乙個顯著的挑戰。新開發者被僱傭和生產(作者所謂的生產可以看「注1」)的時間越長,需要耗費的時間就越長,尤其是一些經驗豐富的開發者。
鑑於此,有效的入職工作流程有兩個需要考慮關鍵的問題:
· 如何將從新人坐下到熟悉專案的時間縮短到盡可能小?
· 新員工如何盡快進入狀態?
實際上,乙個更好的問題是:無論開發人員是剛剛到公司還是剛剛接觸乙個專案,我們該如何讓他們盡快熟悉專案並進行開發?
*注:本文中,所謂生產可以理解為新增新功能,修復現有bug,或者能夠調研安裝開發過程需要用到的**庫。
有很多技術可以用來解決上述問題,包括shell指令碼、wamp、mamp和lamp 堆疊技術以及虛擬機器,但是我發現最引人注目的是docker。docker是devops世界中眾所周知的新生兒,它最新的一系列技術,旨在使專案能夠從開發環境平滑地過濾到生產環境。
當然,docker能夠讓你比較容易接觸新技術,並且讓你覺得它無所不能。 然而,docker真的特別擅長減少新開發人員的新人時間(從入職到能幹活)。今天,我將介紹docker可以顯著減少新員工熟悉專案時間的五個方面。
docker是唯一的依賴
如果你已經做開發至少五年,你應該熟悉一系列用於構建開發環境的方法。
最初,有(l,w,m)amp堆疊,可以讓開發人員的機器包含各種開發庫和依賴包。雖然對於一些專案是很有用的,但是這種方法往往會導致機器迅速變得凌亂。特別是在不同的專案需要不同版本的相同開發庫(例如加密,字串處理,數字處理或ssl)的時候。
開發機器也可能會被迅速填滿大量安裝包,以及一系列配置。 因此,幾乎不可能在生產環境中或在任何其他地方重新構建相同的環境。相反,這又將導致不良的「為我所用」的效應。
如果應用程式的需求更多,你可以先確定相關的需求,然後構建乙個自定義的容器配置,組裝必要的容器來滿足這些需求。如果你構建了自定義容器,而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。2023年,微軟宣布初步支援改進windows server,以便可以支援docker。然而,我不知道在寫這篇文章的時候,這種改進是否已經完成或者蘋果是否有類似的這種支援。
儘管如此,docker仍然可以在兩個平台上執行,分別通過docker for windows和docker for mac。這些包提供了乙個linux基礎庫,可以在其上執行docker。基於這些改變和軟體包,無論開發人員使用哪種平台,他們都可以利用docker配置檔案和相關工具快速搭建工作所需的所有環境。
我知道,可能有些it企業的政策是限制使用某些作業系統。然而,這通常是乙個不好的選擇。由於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,看看它如何能夠幫助你做得更好。
Docker 開發者常用操作命令
下面可能是我用得最多的命令 docker ps 檢視當前 docker 服務列表 docker restart name 重啟指定 docker 服務 docker logs name t f 檢視指定服務執行時日誌 docker inspect name 檢視指定服務 docker 資訊建立 do...
Docker搭建便捷的開發者環境
你可能遇到這樣的場景 開發軟體時,需要像資料庫 mysql,mongodb 訊息系統 rabbitmq 快取服務 redis 等其它依賴服務。當然我們可以找台機器,一步步安裝依賴,然後把所有依賴的服務都安裝好,這就是一台測試機。為了避免重複的勞動,vm層面的解決方案就是把這個測試機做成映象,以後申請...
IBM發布最新開發者工具以支援雲服務
北京時間2月5日凌晨訊息,ibm周四發布了新的開發者工具,這些工具可能有助於其增強自身雲服務的計畫。ibm推出這些新工具旨在為其雲服務提供支援,這是因為隨著客戶日益轉向雲服務,ibm一些 較高的技術被逐漸棄用,促使其必須增強自身雲服務以便與對手展開競爭。新工具能幫助開發者更快地工作 為現有的軟體應用...