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