Docker鏡像的commit操作示例及作用
Docker 鏡像是什么
UnionFS(聯(lián)合文件系統(tǒng))
UnionFS(聯(lián)合文件系統(tǒng)):Union文件系統(tǒng)是一種分層、輕量級(jí)并且高性能的文件系統(tǒng),它支持對(duì)文件系統(tǒng)的修改作為一次提交來一層層的疊加,同時(shí)可以將不同目錄掛載到同一個(gè)虛擬文件系統(tǒng)下(unite several directories into a single virtual filesystem)。Union文件系統(tǒng)是Docker 鏡像的基礎(chǔ)。鏡像可以通過分層來進(jìn)行繼承,基于基礎(chǔ)鏡像(沒有父鏡像),可以制作各種具體的應(yīng)用鏡像。
特性:一次同時(shí)加載多個(gè)文件系統(tǒng),但從外面看起來,只能看到一個(gè)文件系統(tǒng),聯(lián)合加載會(huì)把各層文件系統(tǒng)疊加起來,這樣最終的文件系統(tǒng)會(huì)包含所有底層的文件和目錄。
Docker 鏡像加載原理
docker 的鏡像實(shí)際上是由一層層的文件系統(tǒng)組成,這種層級(jí)的文件系統(tǒng) UnionFS。
bootfs(boot file system)主要包含 bootloader 和 kernel,bootloader 主要是引導(dǎo)加載 kernel,Linux 剛啟動(dòng)時(shí)會(huì)加載 bootfs 文件系統(tǒng),在 Docker 鏡像的最底層是 botfs。這一層與我們典型的 Linux/Unix 系統(tǒng)是一樣的,包含 boot 加載器和內(nèi)核。當(dāng) boot 加載完成之后整個(gè)內(nèi)核就都在內(nèi)存中了,此時(shí)內(nèi)存的使用權(quán)已由 bootfs 轉(zhuǎn)交給內(nèi)核,此時(shí)系統(tǒng)也會(huì)卸載 bootfs。
rootfs (root file system),在 bootfs 之上,包含的就是典型 Linux 系統(tǒng)中的 /dev,/proc,/bin,/etc 等標(biāo)準(zhǔn)目錄和文件。rootfs 就是各種不同的操作系統(tǒng)發(fā)行版,比如 Ubuntu,Centos 等等。
對(duì)于一個(gè)精簡(jiǎn)的OS,rootfs 可以很小,只需要包括最基本的命令、工具和程序庫就可以了,因此底層直接用 Host 的kernel,自己只需要提供 rootfs 就行了。由此可見對(duì)于不同的 Linux 發(fā)行版嗎,bootfs 基本是一致的,rootfs 會(huì)有差別因此不同的發(fā)行版本可以公用bootfs。
分層的鏡像
我們以 tomcat 鏡像為例,在下載的過層中可以看到 docker 的鏡像好像是在一層一層的在下載。
- 為什么 Docker 鏡像要采用這種分層結(jié)構(gòu)
最大的好處就是-共享資源
比如:有多個(gè)鏡像都是從相同的 base 鏡像構(gòu)建而來,那么宿主機(jī)只需要在磁盤上保存一份 base 鏡像,同時(shí)內(nèi)存中也只需要加載一份 base 鏡像,就可以為所有容器服務(wù)了。而且鏡像的每一層都可以被共享。
- 特點(diǎn)
Docker 鏡像都是只讀的,當(dāng)容器啟動(dòng)時(shí),一個(gè)新的可寫層被加載到鏡像的頂部。這一層通常被稱作“容器層”,“容器層”之下的都叫做“鏡像層”。
Docker 鏡像 commit 操作
docker commit 能做什么
docker commit
提交容器副本使之成為一個(gè)新的鏡像docker
commit 格式
docker commit -m='提交的描述信息' -a='作者' 容器ID 新鏡像名:標(biāo)簽
案例演示
下載一個(gè) tomcat 鏡像到本地并成功運(yùn)行
[root@docker ~]# docker pull tomcat [root@docker ~]# docker run -d -p 8888:8080 tomcat
進(jìn)入容器并在 / 目錄下創(chuàng)建文件 test,退出容器
[root@docker ~]# docker exec -it $(docker ps -q) bash root@4004f1503c75:/usr/local/tomcat# touch /test root@4004f1503c75:/usr/local/tomcat# exit
當(dāng)前正在運(yùn)行的 tomcat 容器,根目錄下新創(chuàng)建了一個(gè) test 文件,以它為模板 commit 一個(gè)根目錄下有 test 文件的 tomcat 鏡像
#新鏡像創(chuàng)建成功 [root@docker ~]# docker commit -a="test" -m="test" $(docker ps -q) tomcat:test sha256:1dcb7604643bb29e47420f7a4d40582564a89df59fd3ae4602e72a84f27af9db [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat test 1dcb7604643b About a minute ago 649 MB tocmat latest 625b734f984e 41 hours ago 648 MB
啟動(dòng)新鏡像 tomcat:test,查看 / 目錄下是否具有 test 文件
[root@docker ~]# docker run -d tomcat:test [root@docker ~]# docker exec -it ec738896bc67 ls /test /test
以上就是Docker鏡像的commit操作示例及作用的詳細(xì)內(nèi)容,更多關(guān)于Docker鏡像commit操作的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Docker容器中運(yùn)行flume及啟動(dòng)不輸出運(yùn)行日志問題
這篇文章主要介紹了 Docker容器中運(yùn)行flume及啟動(dòng)不輸出運(yùn)行日志問題及解決方法,需要的朋友參考下吧2018-03-03Docker發(fā)布鏡像到DockerHub與阿里云容器
本文主要介紹了Docker發(fā)布鏡像到DockerHub與阿里云容器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07使用docker極簡(jiǎn)打包java.jar鏡像并啟動(dòng)的操作步驟
這篇文章主要介紹了用docker極簡(jiǎn)打包java.jar鏡像并啟動(dòng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08