Website logo

Robert Chang

技術部落格

Docker - 到底是什麼?

你以為只有程式語言才有 Hello World 嗎?這就大錯特錯了,每一種工具都有它最快速享受的途徑,而 Docker 當然也有。

進入你的終端機,並且輸入下方指令:

$ docker container run robeeerto/hello-world
Unable to find image 'robeeerto/hello-world:latest' locally
latest: Pulling from robeeerto/hello-world
ab6db1bc80d0: Already exists
78d1a7fe91be: Pull complete
1b5e045db495: Pull complete
Digest: sha256:545cf06ea308fc151860f056a4aca04b5b1747fb0b33e035ed530b3753a94534
Status: Downloaded newer image for robeeerto/hello-world:latest
------------------
Hi 你好,歡迎來到 Docker 的世界
這是你啟動的第一個 Container!
------------------

現在的你肯定是一頭霧水,到底發生了什麼事情了?請放心,之後你就會一步一步地了解的。

所以說 Docker 到底是什麼

這個問題在程式語言的世界不太可能會出現,畢竟就是程式語言嘛!

但是 Docker 呢?這個問題在剛開始學習的時候也困擾了我很久,我究竟要用什麼樣的方式來描述 Docker 這個服務的概念,當有人問到我 Docker 是什麼時,我應該怎麼回答呢?

我會說:Docker 是一個用於開發、交付以及執行應用程式的開放平台

有了 Docker,你可以很輕鬆地管理應用程式,透過 Docker 提供的 API 來快速交付、測試和部署程式碼,也可以大幅減少在測試程式碼和部署到正式環境中的耗時。

而所謂的減少耗時其實就是讓部署到正式環境的意外降到最低,讓你的開發環境和正式環境一模一樣,進而提升開發速度,這也是 Docker 最令人興奮的一點,讓所有的事情都變得更快,更有效率,更一致。

Docker 提供了在容器中的隔離環境,裡面包含了打包和運作應用程式的能力,隔離可以讓你在一個特定的主機上同時運作多個容器。

這邊大可放心,容器是非常輕量且可拋棄的,不會佔用電腦過多的硬碟空間,而在容器裡裝好了執行應用程式所需的一切工具,不需要依賴本機安裝的工具,你可以在工作時輕鬆的共享容器,並確保所有的同事都啟用了相同的容器,在同樣的環境中工作。

所以我可以用 Docker 做些什麼

看完上一段說明了什麼是 Docker 後,可能還是很難有共鳴,畢竟很多的工具都是在解決了實際的問題後才會感受到其強大之處。

所以我們用現實的情境來舉例,如果你是一個 Web 工程師,就可能曾經遇到過要跑自動測試,自己手動部署,接著再手動測試應用程式的一個無限循環之中,一天的時間除了開發之外,有一堆時間再等待,或是痴痴地看著終端機在表演,一次兩次或許會覺得還好,但長時間下來就有可能會造成程式碼的品質下降,畢竟你除了要寫好程式之外,還要分心在部署以及手動測試上,但一天的時間就那麼多,除非要自願性加班,不然可能會產生 程式碼只要能動就好了 ( 老闆我沒有這樣想,如果你看到的話 ) 的心態,變成一個惡性循環。

再舉例另一個情境,有新的同事上工了,你給了他一份完整的上工文件讓他可以在本機安裝相依套件,把開發環境給建置起來,經過一整個早上,這個沒辦法編譯,那個環境不對,你可能就要親自過去幫忙看看問題出在哪,更何況現在還流行遠端工作,根本很難找到問題,會讓新人的上工遇到困難。

若是上述的兩種情況,使用 Docker 都可以迎刃而解,先以第二個情境來說好了,我們可以透過 Docker 建立一個固定的開發環境,並且透過 Docker 啟動這個固定的開發環境,讓新來的同事只要安裝 Docker 就能夠快速上工,免除了開發環境不相同的煩惱,同時也讓生產力的銜接能夠跟上。

至於第一種情況,就會牽涉到較多的 DevOps 知識,後面的鐵人賽也會有簡易的 CI / CD 建置,讓你可以套用在自己手邊的 Side Project,或是在公司的專案中使用,只需要通過 GitHub 的 PR 審核,就會自動部署到正式環境。

Docker 響應式的部署以及擴展

容器可以運作在開發人員的電腦上,也可以運作在數據中心的物理機器或虛擬機器 ( AWS, GCP 等等 ),還可以在雲端供應商提供的混合環境中生存。

Docker 的可移植性和輕量的特性讓他可以動態地管理工作負載,根據業務需求,可以適時地擴大或是縮小應用程式和服務,進而降低產品的成本和維護難度。

Docker 既輕量又快速,它提供了一個可行又具備成本效益的替代方案來取代虛擬機,這樣就更能夠專注在開發我們的商務邏輯進而達到業務目標。Docker 同時也是在高密度環境以及中小型部署的完美選擇,因為我們都需要用更少的資源來做更多的事情!

結語

如果是完全的新手,今天應該是運行了自己的第一個容器,一開始一定很一頭霧水,或是覺得這東西有什麼好屌的,根本感受不到好處。

但隨著時間的推進,會慢慢感受到 Docker 的魅力,甚至開始覺得什麼東西都要 Dockerize 一下。

明天則會正式進入容器的使用章節,希望這次鐵人賽能夠涵蓋到比較多的範圍。

上一篇文章Docker - 基礎的部件以及架構

下一篇文章Docker - 啟動 Container