4 映象的原理

2022-01-10 10:07:21 字數 3369 閱讀 8779

映象是一種輕量級, 可執行的獨立軟體包, 用來打包軟體執行環境和基於執行環境開發的軟體, 它包含執行某個軟體所需的所有內容, 包括**, 執行時, 庫, 環境變數和配置檔案. 

unionfs聯合檔案系統: union檔案系統(unionfs) 是一種分層, 輕量級並且高效能的檔案系統, 它支援對檔案系統的修改作為一次提交來一層層的疊加, 同時可以將不同目錄掛載到同乙個虛擬檔案系統下. union檔案系統是docker映象的基礎,

映象可以通過分層來進行整合, 基於基礎映象(沒有父映象), 可以製作各種具體的應用映象.

特性:一次同時載入多個檔案系統, 但從外面看起來, 只能看到乙個檔案系統, 聯合載入會把各層檔案系統疊加起來, 這樣最終的檔案系統會包含所有底層的檔案和目錄

docker映象實際上是由一層一層的檔案系統組成, 這種層級就是聯合檔案系統unionfs, 

bootfs(boot file system) 主要包含bootloader和kernel, bootloader主要是引導載入kernel, linux剛啟動時會載入bootfs檔案系統, 在docker映象的最底層是bootfs, 這一層與我們典型的linux/unix系統是一樣的, 包含boot載入器和核心, 當boot載入完成之後整個核心就都在記憶體中了, 此時記憶體的使用權已有bootfs轉交給核心, 此時系統也會解除安裝bootfs. 

rootfs(root file system), 在bootfs之上, 包含的就是典型linux系統中的/dev, /proc, /bin, /etc等標準目錄和檔案, rootfs就是各種不同的作業系統發行版, 比如ubuntu, centos等.

對於乙個精簡的os, rootfs可以很小, 只需要包括最基本的命令, 工具和程式庫就可以了,因為底層直接用host的kernel, 自己只需提供rootfs就可以了. 由此可見,對於不同發行版本的linux, bootfs基本是一致的, rootfs會有差別, 因此不同的發行版可以共用bootfs

這裡就說明了docker為什麼小而快, 就是因為他和主機功能核心.

發現乙個問題, tomcat映象的大小是647m, 而centos映象是237m, 我們都知道centos 作業系統的映象怎麼也要幾個g, 這裡只有二百多m, 這是什麼原因就不說了,上面已經解釋了. 那為什麼tomcat映象要比centos的映象大

呢? 原因是tomcat不是乙個單獨的映象, 它包含了執行環境. 我們上面說了, 映象就像一層一層的洋蔥皮. tomcat要執行在作業系統上, 作業系統要安裝jdk,然後才能啟動tomcat. 我們來模擬這個場景

最大的好處就是---共享資源

比如: 有多個映象都從base映象構建二來,  那麼宿主機只需要在磁碟上儲存乙份base映象, 同時記憶體中也只需要載入這乙份base映象, 就可以為所有的容器服務了, 而且映象的每一層都可以被共享.  

docker映象都是唯讀的, 乙個新的可寫層被載入到映象的頂部, 這一層通常被稱為"容器層", "容器層"之下的都被稱為"映象層". 

映象執行, 生成容器, 容器執行生成映象

也就是說, 我們必須至少有乙個執行在前台的守護程序

docker commit提交容器副本使之稱為乙個新的映象

docker commit -m= "

提交的資訊描述

" -a="

作者" 容器id 要建立的目標映象名:版本號

1. 案例1: 

先來看看如果沒有後台啟動的程序, 程式是否會退出

剛剛啟動的容器, 果然退出了. 之前就不知道為什麼啟動不起來. 原因就是, 這裡沒有前台執行的守護程序. 所以, 一啟動, 就退出了

讓docker 容器在前台啟動守護程序的方法有很多. 比如 -it /bin/bash, 比如在dockerfile中新增前台執行守護程序等

docker run -it --name test docker.io/centos
比如: 加乙個-it進入到客戶端.

2. 案例2:

下面我們來模擬執行tomcat

docker images tomcat
然後啟動tomcat容器

docker run -it -p 8080:8080 docker.io/tomcat

-p: 做了乙個埠對映, 將本機的8080埠對映到docker 容器

這時候容器啟動了, 我們看看啟動的日誌訊息

我們看到這裡啟動tomcat和我們平時啟動tomcat看到的日誌是一樣的

我們可以從瀏覽器中訪問到: 輸入的是虛擬機器的**  192.168.198.133:8080, 可以看到tomcat的啟動頁面

接下來我們刪除tomcat訪問的文件

進入到tomcat容器

docker exec -it 05169ce5172a /bin/bash
檢視tomcat的文件

刪除掉doc目錄

然後製作乙個新的tomcat映象, 沒有docs文件的tomcat

輸入命令

docker commit -m="

沒有docs的tomcat

" -a="

lxl" 容器id lxl/tomcat02

commit命令在實戰專案中會比較有用, 這裡了解一下.

docker映象原理

映象就是基於執行環境的軟體包,不妨想象成乙個千層餅 映象底層就是unionfilesystem聯合檔案系統,簡稱union檔案,分為 bootfs 引導載入kernel,包含載入器和記憶體 rootfs 不一樣,諸如ubuntu 和centos的區別,但他們都共用bootfs載入的核心 顯然這種分層...

Docker 映象原理

目錄參考文獻 映象是什麼 unionfs 映象載入原理 為什麼採用分層映象 toc尚矽谷 docker核心技術 基礎篇 形象說法 映象就像千層餅,一層套一層 官方 映象是一種輕量級 可執行的獨立軟體包,用來打包軟體執行環境和基於執行環境開發的軟體,它包含執行某個軟體所需的所有內容包括 執行時 庫 環...

Docker系列 映象原理

映象是一種輕量級的可執行的軟體包,用來打包軟體執行的環境和基於執行環境開發的軟體,它包含軟體執行所需的所有內容,包括 依賴庫 環境變數 配置檔案。unionfs是一種分層 輕量級 高效能的檔案系統,它支援對檔案系統的修改作為一次提交來一層層疊加,同時可以將不同目錄掛載到統一虛擬檔案系統下。union...