【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