溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

docker內(nèi)部邏輯怎么理解

發(fā)布時間:2021-12-13 16:30:54 來源:億速云 閱讀:148 作者:iii 欄目:云計算

本篇內(nèi)容主要講解“docker內(nèi)部邏輯怎么理解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“docker內(nèi)部邏輯怎么理解”吧!

docker內(nèi)部邏輯怎么理解

鏡像(Image)——一個特殊的文件系統(tǒng)
Docker 鏡像是一個特殊的文件系統(tǒng),除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準(zhǔn)備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)

容器(Container)——鏡像運行時的實體
容器是鏡像運行時的實體。容器可以被創(chuàng)建、啟動、停止、刪除、暫停等

倉庫(Repository)——集中存放鏡像文件的地方
鏡像構(gòu)建完成后,可以很容易的在當(dāng)前宿主上運行,但是, 如果需要在其它服務(wù)器上使用這個鏡像,我們就需要一個集中的存儲、分發(fā)鏡像的服務(wù),Docker Registry就是這樣的服務(wù)

Docker采用了C/S架構(gòu)??蛻舳撕头?wù)端可以運行在一個機器上,也可以通過socket或者RESTful API 來進行通信。
Docker  Daemon: 一般在宿主機后臺運行,等待接收客戶端的消息
Docker Client:則為客戶提供一系列可執(zhí)行的命令, 用戶使用這些命令跟docker daemon交互

docker內(nèi)部邏輯怎么理解

1、用戶是使用Docker Client與Docker Daemon建立通信,并發(fā)送請求給后者

2、Engine執(zhí)行Docker內(nèi)部的一系列工作,每一項工作都是以一個Job的形式的存在。

3、Job的運行過程中,當(dāng)需要容器鏡像時,則從Docker Registry中下載鏡像,并通過鏡像管理驅(qū)動graphdriver將下載鏡像以Graph的形式存儲;當(dāng)需要為Docker創(chuàng)建網(wǎng)絡(luò)環(huán)境時,通過網(wǎng)絡(luò)管理驅(qū)動networkdriver創(chuàng)建并配置Docker容器網(wǎng)絡(luò)環(huán)境;當(dāng)需要限制Docker容器運行資源或執(zhí)行用戶指令等操作時,則通過execdriver來完成。libcontainer是一項獨立的容器管理包,networkdriver以及execdriver都是通過libcontainer來實現(xiàn)具體對容器進行的操作。

1、容器和虛擬機對比

2、Docker的優(yōu)勢

3、Docker的劣勢

4、Docker的應(yīng)用場景

docker內(nèi)部邏輯怎么理解

1、Docker安裝

2、認(rèn)識鏡像和容器

3、鏡像容器管理

docker內(nèi)部邏輯怎么理解

什么是鏡像?
鏡像是一個多層的聯(lián)合只讀的文件系統(tǒng)。

什么是容器?
容器是在鏡像基礎(chǔ)上加上讀寫層。容器即進程。

構(gòu)建鏡像的過程?
鏡像->鏡像+可寫層+執(zhí)行命令->commit為新的鏡像(新的一層)->鏡像+可寫層+執(zhí)行命令->commit為新的鏡像(新的一層)->…

docker內(nèi)部邏輯怎么理解

典型文件系統(tǒng)啟動 :
一個典型的 Linux 文件系統(tǒng)由 bootfs 和 rootfs 兩部分組成,

bootfs(boot file system)

主要包含 bootloader 和 kernel,bootloader 主要用于引導(dǎo)加載 kernel,當(dāng) kernel 被加載到內(nèi)存中后 bootfs 會被 umount 掉

rootfs (root file system)

包含的就是典型 Linux 系統(tǒng)中的/dev,/proc,/bin,/etc 等標(biāo)準(zhǔn)目錄和文件

加載過程:
bootfs 時會先將 rootfs 設(shè)為 read-only,然后在系統(tǒng)自檢之后將 rootfs 從 read-only 改為 read-write,

Docker文件系統(tǒng)啟動:

Docker 在 bootfs 自檢完畢之后并不會把 rootfs 的 read-only 改為 read-write,而是利用 union mount(UnionFS 的一種掛載機制)將 image 中的其他的 layer 加載到之前的 read-only 的 rootfs 層之上,每一層 layer 都是 rootfs 的結(jié)構(gòu),并且是read-only 的。所以,我們是無法修改一個已有鏡像里面的 layer 的!只有當(dāng)我們創(chuàng)建一個容器,也就是將 Docker 鏡像進行實例化,系統(tǒng)會分配一層空的 read-write 的 rootfs ,用于保存我們做的修改

docker內(nèi)部邏輯怎么理解

基礎(chǔ)鏡像的層信息

docker pull centos

tree -L 2 /var/lib/docker/overlay2/

構(gòu)建后鏡像的層信息

cd layer_dockerfile/

docker build -t centos:test -f ./Dockerfile .

tree -L 2 /var/lib/docker/overlay2/

每一層都包含了”該層獨有的文件”以及”和其低層共享的數(shù)據(jù)的連接”,在Docker 1.10之前的版本中,目錄的名字和鏡像的UUID相同,而Docker 1.10后則采用了新的存儲方式,可以看到目錄名和下載鏡像的UUID并不相同

Diff
存放掛載點的具體的文件內(nèi)容

Link
對應(yīng)l目錄的鏈接源的名稱

Lower
根沒有l(wèi)ower,其它的lower指向的父層的鏈接

L:
”l“目錄包含一些符號鏈接作為縮短的層標(biāo)識符. 這些縮短的標(biāo)識符用來避免掛載時超出頁面大小的限制

docker內(nèi)部邏輯怎么理解

docker內(nèi)部邏輯怎么理解

Commit:容器提交為鏡像

docker run -idt --name test centos

Touch liwei

docker commit 6de test2

Create:創(chuàng)建容器但是不啟動

docker create --name nginx-con -p80:80 nginx:latest

Start:啟動容器

docker start nginx-con

Stop:停止容器

docker stop nginx-con

Kill:殺掉容器,和停止相比不友好

docker kill nginx-con

Pause:暫停容器

docker pause nginx-con

Unpause:恢復(fù)暫停的容器

docker unpause nginx-con

Run:創(chuàng)建且啟動容器

docker run -idt --restart=always --name nginx_con -v /tmp/:/mnt -p 88:80 -e arg1=arg1 nginx
Docker attach nginx_con
Ctrl+^p+^q

CP:宿主機和容器之間copy文件

docker cp docker_install.sh nginx_con:/opt

docker exec nginx_con ls /opt

docker cp nginx_con:/opt/docker_install.sh ./1.sh

Exec:執(zhí)行命令,也可附加到容器

docker exec nginx_con ls /opt

Attach:附加到容器

docker attach nginx_con

docker exec -it nginx_con /bin/bash

Logs:查看容器日志

docker logs –f nginx_con

Inspect:查看元數(shù)據(jù),可以查看鏡像和容器

docker inspect nginx_con

Port:查看容器端口映射

docker port nginx_con

Top:查看容器中正在運行的進程

docker top nginx_con

Ps:查看容器

docker ps

docker ps -a

docker ps -aq

查看正在運行的容器,加上-a查看所有容器(包含停止和暫停狀態(tài)的容器)

Rm:刪除容器

docker rm nginx_con 刪除容器

docker rm -f nginx_con 強行刪除容器

Export:導(dǎo)出容器

docker pull busybox

docker run -itd busybox

docker export 983989307eef>busybox.tar

Import:導(dǎo)入容器

docker import busybox.tar busybox:1.3

Save:導(dǎo)出鏡像

docker save busybox:1.3>busybox1.3.tar

Load:導(dǎo)入鏡像

docker load -i busybox1.3.tar

Tag:鏡像打標(biāo)簽

docker tag busybox:1.3 192.168.199.160/test/busybox:latest

Build:從dockerfile構(gòu)建鏡像

FROM centos

ENV TZ "Asia/Shanghai"

ADD echo.sh /opt/echo.sh

RUN chmod +x /opt/echo.sh

CMD ["/opt/echo.sh"]

docker build -t centos:test -f Dockerfile .

Pull:從 registry拉取鏡像

docker pull nginx 從dockerhub上拉取

docker pull 192.168.199.160/test/nginx:latest 從內(nèi)網(wǎng)harbor上拉取

Push:推送鏡像到倉庫[第一次需要輸入密碼,后續(xù)不需要了]

docker login 192.168.199.160

admin

Harbor12345

docker push 192.168.199.160/test/busybox:latest

Info、version、events

docker info 查看docker相關(guān)信息信息

Docker version 查看docker相關(guān)版本信息

Docker events 查看docker事件

【注】
1、創(chuàng)建容器后防火墻不要再動

2、cmd會被覆蓋的問題,需要注意,可能會導(dǎo)致/bin/bash 把啟動命令覆蓋了,啟動不了的問題例如
docker run -idt --restart=always --name nginx_con -v /tmp/:/mnt -p 88:80 -e arg1=arg1 nginx /bin/bash

3、cmd的命令都會在掛在后執(zhí)行。

到此,相信大家對“docker內(nèi)部邏輯怎么理解”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI