Like Share Discussion Bookmark Smile

J.J. Huang   2019-03-23   Docker   瀏覽次數:次   DMCA.com Protection Status

Docker - 第一章 | 簡介

首先必須說明為什麼要在 第十二章 - SpringBoot Lombok簡單介紹使用 文章之後插入Docker的教學,因為在前面的Spring Boot教學,都還沒有使用到其他系統或是服務,例如資料庫、MQ、NoSQL…等等,但是在之後的Spring Boot教學將會進入到連接資料庫的教學或是消息隊列的使用,然而在這些環境服務的安裝上,以往都是使用另一台電腦或是開啟一個VMWare安裝一個OS然後再來安裝這些服務,既費時又費工。下面將會介紹Docker的好處。

Virtual Machines(VM) 是什麼?

虛擬機器是行為類似實際電腦的電腦檔案 (通常稱作映像)。換言之,就是在電腦內建立一部電腦。它就像任何其他程式一樣在視窗內執行,在虛擬機器上給予終端使用者的體驗就如同在主機作業系統本身一樣。虛擬機器自系統其餘部分隔離進行沙箱化,意味虛擬機器內的軟體無法自電腦本身逸出或竄改。如此便可製造出理想的環境,以便用來測試其它作業系統 (包括 Beta 版)、存取感染病毒的資料、建立作業系統備份,以及在作業系統上執行原本未打算執行的軟體或應用程式。


Docker 簡介

相較於傳統的虛擬機器(例如 VirtualBox 與 VMWare 等),Docker 是一個輕量級的容器,只包含特定程式執行所需要的必要元件,不像虛擬機器要包含整個作業系統,所以大小會比較小,執行效能也會比較高。

  • 以下兩張圖是 Docker 與 傳統虛擬機器 的比較

  • Docker 容器的架構下,容器只需要包含程式與其所需要的函式庫,剩下的部份則由 Docker 容器來處理,所有的程式都共用同一個 host 系統核心。

  • 虛擬機器(VM)除了包含程式與函式庫之外,還要加上整個作業系統(Guest OS)。

從這可以看出 Containers 並沒有 OS ,容量自然就小,而且啟動速度快。詳細介紹


Docker 好處

  • 資源利用

    比起傳統虛擬機器(VM),Docker利用率更高、啟動速度快

  • 統一環境

    Docker建立可以確保大家使用的環境一致性,以降低版本或是環境差異上造成的問題

  • DevOps

    可在任何地方做一次性建置、設定、遷移,既快速又能確保環境正常


Docker 名詞的基本觀念

  • Image 映像檔

    Docker 都是唯讀的 Image,Image 執行(instance) 產生 Container

  • Container 容器

    Container 可以 run、start、stop、rm,每個 Container 都是獨立分離的。Image 是唯讀的,所以 Container 啟動時,會在上面建立一層可以寫入的層級。(最多寫入127層)
    下張圖解釋了 Image 是唯讀( R\O )以及 Container 是讀寫模式( R\W ) 的關係

  • Registry 倉庫

    (Public / Private) https://hub.docker.com/ # Image 預設都由此處抓取

簡單的流程介紹:

  1. 由 Registry 抓取 Image 到 Local 端,可以把 Image 想成是作業系統的 IMG、ISO 檔
  2. 啟動此作業系統(Image) 會產生 Container (實體化)

註:一個 Image 可以產生、執行出多組 Container
(同一個 VM 可以多重執行,執行當下會產生 Container,Container 上面會有自己寫入的 aufs 層級)
可以想像 Container 就是 Image 上面的一層 Layer


Docker 安裝

由於網路上有很多大大提供的安裝教學,不管是什麼樣的作業系統都已經有很多文章了,這邊就不再特別撰寫安裝的教學。


Docker 應用場景

  • 微服務

    現在微服務大行其道之下,微服務拆分後,一個項目可能部署包就成倍增加了,而且可能各微服務之間的技術棧是不同的,這時候docker就是最佳選擇了。

  • 持續集成和持續部署 (CI/CD)

    結合Jenkins,通過 Docker 加速應用管道自動化和應用部署,交付速度了有很大程度的提高。

  • IT 基礎設施優化

    Docker 和容器有助於優化 IT 基礎設施的利用率和成本。優化不僅僅是指削減成本,還能確保在適當的時間有效地使用適當的資源。

  • 容器化傳統應用

    容器不僅能提高現有應用的安全性和可移植性,還能節約成本。