都8210年了,還不知道docker就過分了

Yui醬發表於2018-11-14

軟體開發最大的麻煩事之一,就是環境配置。特別是萬惡的windows,經常出現一些奇怪的問題。 特別是新人入職,要裝一大堆環境,就比如我們團隊,後端是Go,要裝啥環境我不太清楚。前端的話,需要裝php,redis,node,nginx,mysql 這5個。 一個一個下載安裝?還得注意版本問題 太煩了。

這時候可以寫一份docker配置,新人入職,按文件一路走下來,順風順水的話1個小時就能裝完跑專案了。

多舒服(@ο@) 哇~ ( ⊙ o ⊙ )啊!

下面是一些關於 docker 的介紹

一、解決的問題

由於不同的機器有不同的作業系統,以及不同的庫和元件,在將一個應用部署到多臺機器上需要進行大量的環境配置操作。

Docker 主要解決環境配置問題,它是一種虛擬化技術,對程式進行隔離,被隔離的程式獨立於宿主作業系統和其它隔離的程式,我們稱之為容器。使用 Docker 可以不修改應用程式程式碼,不需要開發人員學習特定環境下的技術,就能夠將現有的應用程式部署在其他機器中。應用執行在容器裡,容器可以很輕易地copy。

二、與虛擬機器的比較

虛擬機器也是一種虛擬化技術,它與 Docker 最大的區別在於它是通過模擬硬體,並在硬體上安裝作業系統來實現。

啟動速度

啟動虛擬機器需要先啟動虛擬機器的作業系統,再啟動應用,這個過程非常慢;

而啟動 Docker 相當於啟動宿主作業系統上的一個程式。就跟你開啟吃飯的傢伙一樣快速。

佔用資源

虛擬機器是一個完整的作業系統,需要佔用大量的磁碟、記憶體和 CPU,一臺機器只能開啟幾十個的虛擬機器。

Docker 只是一個程式,只需要將應用以及相關的元件打包,在執行時佔用很少的資源,一臺機器可以開啟成千上萬個 Docker

三、優勢

除了啟動速度快以及佔用資源少之外,Docker 具有以下優勢:

更容易遷移

開發過程中一個常見的問題是環境一致性問題。由於開發環境、測試環境、生產環境不一致,導致有些 bug 並未在開發過程中被發現。而 Docker 的映象提供了除核心外完整的執行時環境,確保了應用執行環境一致性,從而不會再出現 「這段程式碼在我機器上沒問題啊」 這類問題。

更容易維護

對開發和運維(DevOps)人員來說,最希望的就是一次建立或配置,可以在任意地方正常執行。 使用分層技術和映象,使得應用可以更容易複用重複部分。複用程度越高,維護工作也越容易。

更容易擴充套件

可以使用基礎映象進一步擴充套件得到新的映象,並且官方和開源社群提供了大量的映象,通過擴充套件這些映象可以非常容易得到我們想要的映象。

四、使用場景

持續整合

持續整合指的是頻繁地將程式碼整合到主幹上,這樣能夠更快地發現錯誤。

Docker 具有輕量級以及隔離性的特點,在將程式碼整合到一個 Docker 中不會對其它 Docker 產生影響。

使用 Docker 可以通過定製應用映象來實現持續整合、持續交付、部署。開發人員可以通過 Dockerfile 來進行映象構建,並結合 持續整合系統進行整合測試,而運維人員則可以直接在生產環境中快速部署該映象,甚至結合 持續部署系統進行自動部署。

而且使用 Dockerfile 使映象構建透明化,不僅僅開發團隊可以理解應用執行環境,也方便運維團隊理解應用執行所需條件,幫助更好的生產環境中部署該映象。

提供可伸縮的雲服務

根據應用的負載情況,可以很容易地增加或者減少 Docker

搭建微服務架構

Docker 輕量級的特點使得它很適合用於部署、維護、組合微服務。

五、映象與容器

映象是一種靜態的結構,可以看成物件導向裡面的類,而容器是映象的一個例項。

映象包含著容器執行時所需要的程式碼以及其它元件,它是一種分層結構,每一層都是隻讀的(read-only layers)。構建映象時,會一層一層構建,前一層是後一層的基礎。映象的這種分層儲存結構很適合映象的複用以及定製。

構建容器時,通過在映象的基礎上新增一個可寫層(writable layer),用來儲存著容器執行過程中的修改。

相關文章