【docker專欄3】docker基礎概念-容器、映象以及引擎組成部分

字母哥部落格發表於2022-07-11

一、docker映象與容器

docker映象是一個可執行的靜態獨立軟體包,包含打包程式程式碼和軟體執行環境等檔案。如:程式碼、執行時庫、環境變數和配置檔案等都包含在其中。容器是映象的執行時狀態(映象中的軟體、程式執行),佔用伺服器CPU、記憶體、磁碟等資源。

如果學過java,用下面的這個類比能夠更形象的理解二者之間的關係:

  • 映象可以類比java類的二進位制位元組碼檔案。
  • 容器可以類比由位元組碼例項化出來的java物件。
  • 一個位元組碼檔案(類)可以new出來多個物件,一個映象可以快速例項化多個容器服務。

映象來源有哪些?

  • Docker Hub官方映象,以及國內阿里雲等都有對外開放的docker映象倉庫。
  • 使用Dockerfile自己構建映象。Dockerfile是程式碼檔案、環境變數、系統依賴軟體等的構建描述,將映象的構建過程固化下來,保證了不重複做環境安裝工作。概念上類似於maven的pom.xml。
  • 企業私有映象以及私有映象倉庫Docker registry

docker容器的本質是宿主機上的一個程式,這句話怎麼理解?

容器的的執行時實質是程式,但它與直接在宿主機裡面執行的程式有所不同,容器程式存在屬於自己的獨立的名稱空間。因此容器擁有自己的 root 檔案系統、自己的網路配置、自己的程式空間,甚至自己的使用者 ID 空間。

容器內的程式是執行在一個隔離的環境裡,使用起來就好像是在一個獨立於宿主的系統下操作一樣。也因為這種隔離的特性,很多人初學 Docker 時常常會混淆容器和虛擬機器。

二、Docker 核心組成部分

我們在前文中安裝的Docker CE主要由如下幾部分構成:Docker 客戶端(Docker Client)、Docker 守護程式(Docker daemon)、containerd 以及 runc,它們協調合作共同負責容器的建立和執行以及生命週期的管理。

  • Docker Client:命令列方式向docker引擎(服務端)傳送指令。
  • REST API:docker 引擎(服務端)通過RESTful API的方式,對外提供操作命令入口。
  • daemon:docker 守護程式,包含REST AP、身份驗證、基礎配置管理等特性。
  • containerd:核心功能用於容器生命週期的管理,如:啟動、暫停、刪除等。映象管理功能也在containerd中。
  • runc :runc是一個輕量級的、針對 Libcontainer 進行了包裝的命令列互動工具(Libcontainer 取代了早期 Docker 架構中的 LXC)。LXC 提供了對諸如名稱空間(Namespace)和控制組(CGroup)等基礎工具的操作能力。

    • namespace實現資源隔離,如:獨立的檔案系統、網路空間、使用者空間等。
    • cgroups實現資源的限制,如每個容器使用多少記憶體。

歡迎關注我的公告號:字母哥雜談,回覆003贈送本文所在專欄《docker修煉之道》的PDF版本,30餘篇精品docker文章。字母哥部落格:zimug.com

相關文章