Docker鏡像的原理

Docker運(yùn)行的整個(gè)生命周期

Docker使用多種操作系統(tǒng)的發(fā)行版

  1. 一個(gè)完整的操作系統(tǒng),是由linux內(nèi)核+發(fā)行版,組成的一個(gè)可以使用的完整操作系統(tǒng)。
  2. 利用docker容器,可以獲不同的發(fā)行版鏡像,然后基于該鏡像,運(yùn)行出各種容器去使用。

查看操作系統(tǒng)的兩大組成

# 查看操作系統(tǒng)的發(fā)行版
cat /etc/redhat-release 

CentOS Linux release 7.9.2009 (Core)
# 查看操作系統(tǒng)內(nèi)核
uname -r

4.19.12-1.el7.elrepo.x86_64

使用docker,來切換不同的發(fā)行版,內(nèi)核都是使用宿主機(jī)的內(nèi)核

# 利用docker獲取不同的發(fā)行版鏡像
docker pull ubuntu
docker pull centos:7.8.2003
# 確認(rèn)當(dāng)前宿主機(jī)的發(fā)行版本
cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)
# 查看本地的docker鏡像有哪些
docker images
# REPOSITORY   TAG        IMAGE ID       CREATED         SIZE
# nginx        latest     4cdc5dd7eaad   32 hours ago    133MB
# redis        latest     08502081bff6   2 weeks ago     105MB
# ubuntu       latest     9873176a8ff5   2 weeks ago     72.7MB
# centos       7.8.2003   afb6fca791e0   14 months ago   203MB
# 運(yùn)行centos7.8.2003發(fā)行版
# 運(yùn)行容器,且進(jìn)入容器內(nèi)
# 參數(shù) 解釋 -i(交互式命令操作) -t(開啟一個(gè)終端) bash(進(jìn)入容器后執(zhí)行的命令)
docker run -it afb6fca791e0 bash
# 查看容器內(nèi)centos的發(fā)行版本
[root@e332fe985eac /]#  cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)

# 退出當(dāng)前的容器空間
exit
# 查看虛擬機(jī)的操作系統(tǒng)內(nèi)核
uname -r
4.19.12-1.el7.elrepo.x86_64
# 進(jìn)入ubuntu系統(tǒng)
docker run -it ubuntu bash

# 查看容器內(nèi)ubuntu的發(fā)行版本
root@5ea99c3a44f1:/# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04 LTS"

# 查看ubuntu的操作系統(tǒng)內(nèi)核(公用宿主機(jī)內(nèi)核)
root@5ea99c3a44f1:/# uname -r
4.19.12-1.el7.elrepo.x86_64

Docker部署服務(wù)的優(yōu)勢

Docker鏡像原理

Docker鏡像 分層原理
# 進(jìn)入正在運(yùn)行的容器內(nèi)
docker exec -it 18c7f9820954 bash

# 查看nginx運(yùn)行使用的基礎(chǔ)鏡像
root@18c7f9820954:/# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Docker鏡像 寫時(shí)復(fù)制原理

鏡像分層的一大好處就是共享資源,例如有多個(gè)鏡像都來自于同一個(gè)base(基礎(chǔ))鏡像,那么docker host只需要存儲(chǔ)一份base鏡像。

  • 內(nèi)存里也只需要加載一份host,即可為多個(gè)容器服務(wù)。
  • 即使多個(gè)容器共享一個(gè)base鏡像,某個(gè)容器修改了base鏡像的內(nèi)容,例如修改/etc/下的配置文件,其他容器的/etc/下內(nèi)容是不會(huì)被修改的,修改動(dòng)作只限制在單個(gè)容器內(nèi),這就是容器寫時(shí)復(fù)制特性(Copy On Write),如下所示。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容