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

一、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

Tags: