iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 2
0
DevOps

Docker獸 究極進化 ~~ Kubernetes獸系列 第 2

Day-2 認識 Docker

What is Docker

Docker是一種讓人能更加容易使用、部署以及運行Container的工具,Container使開發人員能夠只打包所需服務與其依賴的套件,並將打包後的結果進行部署,並且該應用程序能夠在任何平台上執行(linux, windows, unix...),且由於Docker為開源專案,這意味著任何人都能對Docker做出貢獻,並commit所缺失之功能與bugs的修正。

所以

  1. Docker並非是容器,而是用來創建容器的工具、用來驅動容器的引擎。
  2. 每個使用Docker生成的容器都是由Image衍生而來,而Image可像是file一上傳至網上(Registry)讓人download,使得打包及引用的過程相當容易。
  3. Docker能以相當令人滿意的速度從Image建造成Image。

https://ithelp.ithome.com.tw/upload/images/20200917/20129737TEtzXlbR9h.png

Docker engine

Docker engine 主要用來運行Container,而它由三大組件所組成,分別為Docker daemon、REST API與CLI

https://ithelp.ithome.com.tw/upload/images/20200917/20129737E5uvnRbdYn.png

Docker daemon

Docker daemon是一個長時間運行的服務,經由他來進行container的啟動、停止與刪除...等各項動作。通常使用者都是通過預設路徑為/var/run/docker.sock(Unix domain socket) 來與Docker daemon進行溝通。

REST API

REST API相信大家都不陌生,Docker內透過REST的架構來進行Client與Server的溝通。

但這部分範圍稍稍超出新手的程度,所以我會將相關連結貼在reference,有興趣的人在參考看看。

Docker CLI

使用者能夠在command line上透過docker所制定好的命令,去告知Docker daemon以此操作Container。

Docker architecture

Client透過docker command來進行container的操作,Host在接受到命令同時,會去確認本地的image是否存在與版本是否正確,若無此版本的Image則去使用者所選之Registry(像是 Docker hub, Google, Google Registry..etc)進行pull image動作,並執行Client想執行之Container操作。

https://ithelp.ithome.com.tw/upload/images/20200917/20129737sFrtg9AtSO.png

Docker underlying technology(可略過)

Docker底層主要依賴於Linux kernal以及其現有技術所衍生而已。

Docker底層技術由四個部分組成: Namespace、Control groups、Union file systems及Container format

Namespace

命名空間有著以下幾個功能。

  • PID,Process標籤,用來進行Container的環境隔離。
  • NET,Docker network的管理
  • IPC,進程InterProcess的管理
  • MNT,Container掛載資源的環境管理
  • UTS, 用來隔離主機名與域名

依據不同功能,Namespace會將相關的process分為一組並放同個namespace當中,同一namespace中的processes能互相溝通,但無法與其他namesapce中的processes溝通。

https://ithelp.ithome.com.tw/upload/images/20200917/20129737MQ9t25EJ4a.png

Control groups

Control groups又稱cgroups,用來限制與管理Container的資源配置與限制(像是cpu, memory..etc)。每個Container生成時,Docker daemone都會生成一相對應的cgroups來記錄其resource的使用情況,當使用者透過cli或是api來限制資源時,也會記錄在cgroups當中。

https://ithelp.ithome.com.tw/upload/images/20200917/20129737J4ZZPO12tb.png

Union file systems

Union File System(UFS)將多個目錄結合成一個目錄,並只以最上層為讀寫層提供外界使用(下面只會有一或多個讀層),藉此增加容器建構的效率。

https://ithelp.ithome.com.tw/upload/images/20200917/20129737rsLXGxqVKZ.png

Container format

Docker engine 將上述三種技術包裝成一種容器格式,並默認格式為libcontainer,後續可能會加入其他格式,像是BSD Jails 或 Solaris Zones。

若想在細讀上述技術是如何實現,建議在對Docker有一定掌握度後再回來看會比較好。

小結

本章節後,各位讀者應該了解了Docker的原理以及Docker想要達成的願景。在下一章節會開始帶著大家下載並使用Docker,敬請期待!

https://ithelp.ithome.com.tw/upload/images/20200917/20129737ABx5VggnMB.png

Reference

https://docs.docker.com/get-started/overview/

https://docs.docker.com/engine/api/sdk/

https://docker-py.readthedocs.io/en/stable/


上一篇
Day-1 進化的開始,初探Container
下一篇
Day-3 安裝 Docker
系列文
Docker獸 究極進化 ~~ Kubernetes獸30

尚未有邦友留言

立即登入留言