Docker 系列 _ 01_ 一念緣起

程式設計三昧發表於2021-08-27

人們只有在經歷過諸多痛苦之後,才會相信這“緣分”的存在。
而所有的“緣分”,只不過是事物發展的必然結果罷了。

Docker 系列_01

前言

在生產環境配置日益複雜的今天,一套統一的、可移植的環境可能是很多從業人員夢寐以求的。所謂“需求引領市場”,在需求的催動下,解決方案的誕生也只是時間問題而已。

開發測試的苦

    1. 搭環境
    1. 換電腦
    1. 寫文件
    1. 搞適配

所有程式程式碼的執行都需要依賴於具體的系統環境,所以,在專案開發之初,搭建相應的開發環境是必不可少的步驟。任何不以環境為根據的程式碼開發都是耍流氓。

如果是一開始就跟著專案走的話,那還好,至少環境都是逐步完善過來的。但要是中途加入的話,遇到複雜專案,那就別提了,說多了都是淚,光一個環境搭建都能搞得你腰痠背痛外加腿抽筋。

本人親歷:在專案做到一大半的時候,被借調去支援其他專案,歷時大概三個月左右。回來後的狀況可以用一句話來概括——一頓操作猛如虎,一看結果二百五!啥?!單點登入?時候加的?PG庫,怎麼來的……配!配!配!當專案終於能正常跑起來的時候,我腦海中只有一個念頭:專案別三月,見面不相識!

哎,聽說最近有種新技術挺火的……試問你能忍得了這誘惑?我只相信,沒有不喜歡“偷腥”的程式猿,忍得住才怪了(手動白眼)。又到了搭環境的時候了,左手npm,右手brew,還有什麼搞不定的,“偷腥”成功的成就感那是相當爆棚啊!

等等,先別急著興奮,騷年!我且問你兩個問題:

- 1. 你主機中現在裝了多少包?
- 2. 有同事要跟你協同開發,你怎麼給他搭建出一個跟你這一模一樣的環境?

嘿,我這主機中各種各樣的包和服務都有,具體數目我都數不過來(一臉嘚瑟樣)!至於協同開發,那還不簡單,我寫一個文件,只要按照文件一步步走下去,保證能配置出來!再或者,我配置一個虛擬機器,有誰需要開發環境,我只要給他拷出一份虛擬機器映象不就完了。

嗯,我且不懷疑你永遠能及時更新文件的毅力,也不質疑有些公司的電腦配置,在執行虛擬機器之後,除了卡頓不知道還能幹啥……我只想問你:你不覺得你主機目前的狀態有點類似於“大雜燴”嗎?說好的程式猿的條理性呢?有了條理,我們至少還能當斑馬(搬碼),沒了條理,那隻能作一團亂麻了!

運維管理的累

  1. 易出錯
  2. 不一致
  3. 啟動雜
  4. 效率低

作為運維人員,最常聽到的一句話是什麼?要我來說,絕對是“在我這裡好好的,到你那裡怎麼就不行了呢?”最常說的一句話是什麼?我想大概或許也是這句吧。

累死累活、加班加點地才搞定了部署的問題,還沒來得及歇一口氣,又有新的補丁包發過來了。得,還得拼命!

很多運維人員的真實寫照大概是:不是在調環境,就是在調環境的路上。

出路

由於各種各樣的原因,我們常常會把一件腦力活給幹成體力活。愉悅感成就感沒了不說,還得搭上黑眼圈和“地中海”。

直到這時,我們或許會感慨:還是”CV 大法“好!

古話說:窮則變,變則通。人啊,只有被逼到一定地步了,才會想著去改變,尋找出路,安逸的環境基本不可能滋養出”思變“的野心和慾望。眼看這體力跟不上了,頭頂的光芒越發耀眼了,就知道該到了尋求改變的時候了。

那到底有沒有”一次配置,終生受益“的解決方案呢?

虛擬機器

首先,最容易想到的和接觸最多的非虛擬機器莫屬。

虛擬機器(virtual machine)就是帶環境安裝的一種解決方案。它可以在一種作業系統裡面執行另一種作業系統,比如在 Windows 系統裡面執行 Linux 系統。應用程式對此毫無感知,因為虛擬機器看上去跟真實系統一模一樣,而對於底層系統來說,虛擬機器就是一個普通檔案,不需要了就刪掉,對其他部分毫無影響。

雖然使用者可以通過虛擬機器還原軟體的原始環境。但是,這個方案有幾個缺點。

(1)資源佔用多

虛擬機器會獨佔一部分記憶體和硬碟空間。它執行的時候,其他程式就不能使用這些資源了。哪怕虛擬機器裡面的應用程式,真正使用的記憶體只有 1MB,虛擬機器依然需要幾百 MB 的記憶體才能執行。

(2)冗餘步驟多

虛擬機器是完整的作業系統,一些系統級別的操作步驟,往往無法跳過,比如使用者登入。

(3)啟動慢

啟動作業系統需要多久,啟動虛擬機器就需要多久。可能要等幾分鐘,應用程式才能真正執行。

既然虛擬機器存在這麼多缺點,那還有沒有更好的解決方案呢?還真有,那就是 Docker 技術。

一念緣起,我與 Docker 的故事從此開始……

初識 Docker

就因為這樣一個念頭,我懵懵懂懂的走進了 Docker 的世界。

Docker 是什麼?

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的映象中,然後釋出到任何流行的 Linux 或Windows 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。總結一下就是:

  • Docker 是一個開源的軟體部署解決方案;
  • Docker 也是輕量級的應用容器框架;
  • Docker 可以打包、釋出、執行任何的應用。

Docker 的組成

一個完整的 Docker 由以下幾個部分組成:

  1. DockerClient客戶端
  2. Docker Daemon守護程式
  3. Docker Image映象
  4. DockerContainer容器

Docker 的作用

Docker 的主要用途,目前有三大類。

(1)提供一次性的環境。比如,本地測試他人的軟體、持續整合的時候提供單元測試和構建的環境。

(2)提供彈性的雲服務。因為 Docker 容器可以隨開隨關,很適合動態擴容和縮容。

(3)組建微服務架構。通過多個容器,一臺機器可以跑多個服務,因此在本機就可以模擬出微服務架構。

總結

以上就是我和 Docker “結識”的過程,以及對 Docker 的簡單認知,也歡迎大家分享自己和 Docker 結緣的過程。

~

~ 本文完,感謝閱讀!

~

學習有趣的知識,結識有趣的朋友,塑造有趣的靈魂!

大家好,我是〖程式設計三昧〗的作者 隱逸王,我的公眾號是『程式設計三昧』,歡迎關注,希望大家多多指教!

你來,懷揣期望,我有墨香相迎! 你歸,無論得失,唯以餘韻相贈!

知識與技能並重,內力和外功兼修,理論和實踐兩手都要抓、兩手都要硬!

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章