前面講了 Server 的概念,並介紹了 Docker 本人,今天我們開始詳細介紹 Docker 最重要的東西:容器 Docker。
容器會依照自己內部環境所裝載的應用程式,提供相對應的服務。當這個容器裡含有寄送信件的應用程式,那這個容器就是負責提供寄送信件的服務。就像第一天提到的 Server 是一樣的概念。
一個容器提供一種服務,當然在一個容器內裝載兩種應用程式、提供兩種服務,但這樣就有違容器想要達到的隔離環境的概念。
當我們在開發時,都會遇到小至套件、大至應用程式,各自的運作都會牽扯到對彼此的相依。
A 程式的運作,需要 1.3.5 版本的 B 程式,而 C 程式也需要 1.3.5 版本的 B 程式,整個系統由 A、B、C 三個程式的運作所建構而成。
如果今天 B 程式更新 2.0.1 版本,而 A 跟 C 程式因仍未升級,導致他們還是需要 1.3.5 版本的 B 程式時,系統就會異常,在這個例子中,或許我們把 B 程式退回 1.3.5 版本就解決問題了。
但假如 A 程式也升級了,而新的 A 需要 2.0.1 版本的 B,但 C 還沒跟上時,怎麼辦?那是不是就都不要升級了,大家都等來等去!?
我們可以把容器想像成一個箱子,裡面裝載著提供服務的應用程式,每個應用程式在各自的箱子裡可以正常運行,不用你看我我看你、確認過彼此的眼神後,才彼此 say yes,這就是容器最主要的特性,隔離環境,讓應用程式不需要互相依賴,我不再因你而活、而你也能獨立堅強。
就拿上述 A、B、C 程式為例,如果今天把 A、B、C 程式都做成容器,那就會有三個容器,這三個容器各自承載 A、B、C 應用程式,互相聯繫,但互不影響。
A 容器壞了,B、C 仍會持續運作; B 容器的應用程式升到 2.0.1 版本,A 與 C 也不會有依賴 B 版本的問題。這是因為產生 A、B、C 容器的映像檔,本身已經處理了各自容器所需要的套件等等,才讓容器化應用程式可以擁有隔離環境。
剛開始接觸 Docker 容器,多少都會覺得很抽象或是很模糊,這是正常的。
簡單來說,容器就像他字面上的意思,容器 (廢話)。
顧名思義就是用來裝東西的空間,就像我們去餐廳,點了拉麵跟叉燒飯,一定是一碗裝著拉麵,一碗裝著叉燒飯,才不會互相影響,就像 Docker 容器裝著應用程式。
但碗不一定要裝東西呀? 也有可能空的碗? 沒錯~ 所以也會有空的容器,明天我們來介紹空的容器到底是什麼。
以上文章也同步更新在我的部落格:https://wl02599509.github.io/