前言
本文介紹docker的基礎(chǔ)架構(gòu)。
環(huán)境
操作系統(tǒng):centos7
docker版本:docker-ce: 18.09
正文
簡(jiǎn)介
docker是典型的 c/s 架構(gòu)似枕。
通過docker-ce安裝的docker,會(huì)默認(rèn)安裝兩個(gè)組件(通過 docker version 命令可以查看):
- docker client:這里安裝的是cli,提供命令行功能认臊。
- docker server:docker具體功能的實(shí)現(xiàn)者。也稱之為 docker engine吓懈、docker daemon歼冰。
docker server 就如一個(gè)常見的web server,對(duì)外提供restful api耻警。
docker client 可以有多種形式隔嫡,比如sdk、cli甘穿。cli為用戶提供命令行方式腮恩,sdk為程序提供包形式。
docker的架構(gòu)里還包含一個(gè)組件:docker registry温兼。用于存儲(chǔ)容器的鏡像秸滴。
docker 實(shí)現(xiàn)原理
主要依賴:Namespaces、Control groups募判、UnionFS
Namespaces:
命名空間荡含,主要起隔離作用。
其中包含:
pid namespace:進(jìn)程隔離
net namespace:網(wǎng)絡(luò)管理
ipc namespace:IPC(進(jìn)程間通信)資源管理
mnt namespace:文件系統(tǒng)掛載管理
uts namespace:內(nèi)核和版本標(biāo)識(shí)符隔離届垫。
Control groups:
控制組:限制容器對(duì)物理資源的使用释液,比如cpu、內(nèi)存装处。
依賴技術(shù):cgroups误债。
UnionFS:
聯(lián)合文件系統(tǒng):為容器提供塊功能,也就是文件系統(tǒng)。
也可使用其它類似UnionFS的軟件:例如 AUFS, btrfs, vfs, DeviceMapper
Container format
容器格式:這是一個(gè)邏輯概念寝蹈。
表示李命,將 Namespaces、Control groups躺盛、UnionFS 組合起來形成的一種容器项戴。目前的組合方式稱之為 libcontainer,這也是當(dāng)前唯一提供的方式槽惫。
引入該概念周叮,因?yàn)橐院罂赡軙?huì)出現(xiàn)其它形式的容器。
docker 創(chuàng)建一個(gè)容器的主要步驟
- 拉取鏡像
- 創(chuàng)建一個(gè)容器(此時(shí)只是創(chuàng)建界斜,還未啟動(dòng))
- 為容器分配文件系統(tǒng)
- 為容器創(chuàng)建網(wǎng)絡(luò)
- 啟動(dòng)容器仿耽。
注意,當(dāng)docker run 攜帶命令各薇,則會(huì)覆蓋掉鏡像中的CMD项贺。如下:
docker run -i -t ubuntu /bin/bash
此時(shí)無論ubuntu鏡像的CMD是什么都不會(huì)執(zhí)行,而會(huì)去執(zhí)行 /bin/bash峭判。
容器的生命周期
這張圖已經(jīng)十分詳細(xì)开缎,不再贅述。若看不懂林螃,也僅僅是因?yàn)椴皇煜ocker的使用奕删。
擴(kuò)展
無。
參考
https://docs.docker.com/engine/docker-overview/#docker-architecture