Docker | 鏡像淺析,以及製作自己的鏡像

分層下載,docker image 的核心: 聯合文件系統

鏡像是什麼

鏡像就是一個輕量的、獨立的軟件包。用來打包運行環境和基於運行環境開發的軟件。它包含軟件運行所需的所有內容(包括代碼、運行時、庫、環境變量、配置文件)

所有的應用,打包docker鏡像,就可以跑起來。

如何得到鏡像

  • 從遠程倉庫下載

  • 拷貝他人的鏡像(鏡像打包生成tar壓縮包,可以發送壓縮包給別人。)

  • 自己製作一個鏡像(DockerFile

Docker鏡像加載原理

UnionFS(聯合文件系統)

  1. UnionFS(聯合文件系統)是一種分層、輕量、高性能的文件系統。它支持對文件系統的修改作為一次提交,來一層一層的疊加,同時可以將不同目錄掛載到同一個虛擬文件系統下。

  2. 聯合文件系統是Docker鏡像的基礎,鏡像可以通過分層來進行繼承,基於基礎鏡像(沒有父鏡像)可以製作各種具體的應用鏡像。

特性

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

Docker鏡像加載原理:

Docker的鏡像實際上由一層一層的文件系統組成,

  • bootfs(boot file syatem)
  • rootfs(root file system),

就是各種操作系統的發行版,比如UbuntuCentos

分層理解

  • 查看鏡像詳細信息
docker inspect 鏡像id

  • Layers

特點:

docker鏡像都是只讀的,當容器啟動時,一個新的可寫層被加到鏡像的頂部。

這一層就是我們通常說的容器層,容器之下的都叫鏡像層

commit鏡像(提交一個自己的鏡像)

docker commit #提交容器成為一個新的副本

#命令和git原理類似
docker commit -m='提交的描述信息' -a='作者' 容器id 目標鏡像名:[ tag ]

下載的tomcat鏡像是閹割版,啟動之後404,因為webapps下面沒有ROOT文件夾,所以這裡嘗試做一個自己的可正常訪問tomcat主頁的鏡像。(由於鏡像只讀,啟動鏡像之後會在鏡像層之上生成一個容器層,在tomcat容器層做修改,再把鏡像層和修改過後的容器層整體打包成一個新的個人鏡像)

1、下載tomcat鏡像

docker pull tomcat

2、啟動tomcat鏡像

docker run -it -p 3355:8080 tomcat /bin/bash

3、瀏覽器訪問404

4、進入容器,複製webapps.dist目錄下的文件到webapps目錄下

5、提交鏡像

docker commit -m="edit webapps dir" -a="xiao" 容器id tomcat02:1.0

6、查看提交的鏡像信息

docker inspect [imageId]

總結


我是 甜點cc

熱愛前端,也喜歡專研各種跟本職工作關係不大的技術,技術、產品興趣廣泛且濃厚,等待着一個創業機會。本號主要致力於分享個人經驗總結,希望可以給一小部分人一些微小幫助。

希望能和大家一起努力營造一個良好的學習氛圍,為了個人和家庭、為了我國的互聯網物聯網技術、數字化轉型、數字經濟發展做一點點貢獻。數風流人物還看中國、看今朝、看你我。

Tags: