关于 Docker ,你必须了解的核心都在这里了!
來源 |?fysuccess
來源 | CSDN博客,責編 | Carol
頭圖 | CSDN 下載自視覺中國
Docker引擎
Docker Engine是具有以下主要組件的客戶端-服務器應用程序:
服務器是一種長期運行的程序,稱為守護程序進程( dockerd命令)。
REST API,它指定程序可以用來與守護程序進行通信并指示其操作的接口。
命令行界面- - (CLI)客戶端(docker命令)。
Docker架構
Docker使用客戶端-服務器架構。Docker 客戶端與Docker 守護進程進行對話,該守護進程完成了構建,運行和分發Docker容器的繁重工作。Docker客戶端和守護程序可以 在同一系統上運行,或者您可以將Docker客戶端連接到遠程Docker守護程序。Docker客戶端和守護程序在UNIX套接字或網絡接口上使用REST API進行通信。
Docker守護程序
Docker守護程序(dockerd)偵聽Docker API請求并管理Docker對象,例如鏡像,容器,網絡和卷。守護程序還可以與其他守護程序通信以管理Docker服務。
Docker是C/S架構的程序,Docker的客戶端向守護進程發起請求,守護進程處理完成后返回結果。
Docker客戶端既可以在本地訪問守護進程,也可以遠程訪問守護進程。
Docker客戶端
Docker客戶端(docker)是許多Docker用戶與Docker交互的主要方式。當您使用諸如之類的命令時docker run,客戶端會將這些命令發送到dockerd,以執行這些命令。該docker命令使用Docker API。Docker客戶端可以與多個守護程序通信。
Docker注冊表
Docker 注冊表存儲Docker映像。Docker Hub是任何人都可以使用的公共注冊表,并且Docker配置為默認在Docker Hub上查找映像。您甚至可以運行自己的私人注冊表。如果使用Docker數據中心(DDC),則其中包括Docker可信注冊表(DTR)。
使用docker pull或docker run命令時,所需的圖像將從配置的注冊表中提取。使用該docker push命令時,會將映像推送到配置的注冊表。
Docker對象
1)Images(鏡像):
Docker 鏡像(Image)就是一個只讀的創建 Docker 容器的模板。鏡像可以用來創建 Docker 容器,一個鏡像可以創建很多容器。
鏡像是容器的基石,容器基于鏡像啟動,鏡像就像是容器的源代碼,保存了用于容器啟動的各種條件。
鏡像是一個層疊的只讀文件系統,結構如下
bootfs 引導文件系統;
rootfs root文件系統,可以是一種或多種操作系統,如Ubuntu或CentOS,root文件系統永遠只能是只讀狀態;
union mount 聯合加載技術,一次加載多個只讀文件系統到rootfs系統之上。在外圍看到的只是一個文件系統,聯合加載使各層文件系統疊加到一起,使最終的文件系統包含所有底層文件系統和目錄,這樣的文件系統就是鏡像。
一個鏡像可以放到另一個鏡像的頂部,位于下邊的鏡像叫做父鏡像,依次類推,最底部的鏡像叫做基礎鏡像,指的是rootfs
2)container(容器):容器是鏡像的可運行實例,他們的關系就有點類似java中類和對象的關系。
通過鏡像啟動:容器是docker的執行單元。
啟動和執行:鏡像如果是構建和打包階段,則容器是啟動和執行階段
容器啟動過程:啟動時在鏡像的最頂層加一個可寫的文件系統,即可寫層。Docker中運行的程序就是在這個層中執行的。docker第一次啟動一個容器時,可寫層是空的,當文件系統發生變化,都會應用到這一層。如果想修改一個文件,該文件首先會從可讀寫層下邊的只讀層復制到該讀寫層,該文件的只讀版本依然存在,但是已經被讀寫層中的該文件副本所隱藏。這個是docker的重要機制,寫時復制(copy on write)。
Docker 利用容器(Container)獨立運行的一個或一組應用。容器是用鏡像創建的運行實例。
它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。
可以把容器看做是一個簡易版的 Linux 環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序
容器的定義和鏡像幾乎一模一樣,也是一堆層的統一視角,唯一區別在于容器的最上面那一層是可讀可寫的。
3)Registry(倉庫): 是一個集中存儲和分發鏡像的服務。
倉庫(Repository)是集中存放鏡像文件的場所。
倉庫(Repository)和倉庫注冊服務器(Registry)是有區別的。倉庫注冊服務器上往往存放著多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標簽(tag)。
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。
最大的公開倉庫是 Docker Hub(https://hub.docker.com/),
存放了數量龐大的鏡像供用戶下載。國內的公開倉庫包括阿里云 、網易云 等
4)Client(客戶端): 是Docker的用戶界面,可以接受用戶命令和配置標識,使用 Docker Api與 Docker 的守護進程(daemon)通信。
5)Host(主機): 一個物理或者虛擬的機器,用于執行 Docker 守護進程(daemon)和容器。
底層技術
Docker用Go編寫,并利用Linux內核的多個功能來交付其功能。
命名空間
Docker使用一種稱為namespaces提供容器的隔離工作區的技術。運行容器時,Docker會為該容器創建一組 名稱空間。
這些名稱空間提供了一層隔離。容器的每個方面都在單獨的名稱空間中運行,并且其訪問僅限于該名稱空間。
Docker Engine在Linux上使用以下名稱空間:
pid命名空間:進程隔離(PID:進程ID)。
net命名空間:管理網絡接口(NET:網絡)。
ipc命名空間:管理訪問IPC資源(IPC:進程間通信)。
mnt命名空間:管理文件系統掛載點(MNT:摩)。
uts命名空間:隔離內核和版本標識符。(UTS:Unix時間共享系統)。
控制組
Linux上的Docker引擎還依賴于另一種稱為控制組 (cgroups)的技術。cgroup將應用程序限制為一組特定的資源。控制組允許Docker Engine將可用的硬件資源共享給容器,并有選擇地實施限制和約束。例如,您可以限制特定容器可用的內存。
聯合文件系統
聯合文件系統或UnionFS是通過創建圖層進行操作的文件系統,使其非常輕便且快速。Docker Engine使用UnionFS為容器提供構建模塊。Docker Engine可以使用多個UnionFS變體,包括AUFS,btrfs,vfs和DeviceMapper。
容器格式
Docker Engine將名稱空間,控制組和UnionFS組合到一個稱為容器格式的包裝器中。默認容器格式為libcontainer。將來,Docker可以通過與BSD Jails或Solaris Zones等技術集成來支持其他容器格式。
原文鏈接:https://blog.csdn.net/fysuccess/article/details/105653802
推薦閱讀
一文帶你認識keepalived,再帶你通關LVS+Keepalived!
那個分分鐘處理 10 億節點圖計算的 Plato,現在怎么樣了?
“谷歌殺手”發明者,科學天才 Wolfram
數據庫激蕩 40 年,深入解析 PostgreSQL、NewSQL 演進歷程
超詳細!一文告訴你 SparkStreaming 如何整合 Kafka !附代碼可實踐
5分鐘!就能學會以太坊 JSON API 基礎知識!
真香,朕在看了!
總結
以上是生活随笔為你收集整理的关于 Docker ,你必须了解的核心都在这里了!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 灰度测试试验流量“洗牌”
- 下一篇: 钉钉流量暴增百倍,阿里云抗住了!