Docker鏡像構(gòu)建的兩種方法解析
關(guān)于Docker里面的幾個主要概念
這里用個不太恰當(dāng)?shù)谋确絹碚f明。
大家肯定安裝過ghost系統(tǒng),鏡像就像是ghost文件,容器就像是ghost系統(tǒng)。你可以拿別人的ghost文件安裝系統(tǒng)(使用鏡像運(yùn)行容器),也可以把自己現(xiàn)有的系統(tǒng)制作成ghost文件(從容器構(gòu)建鏡像)。Dockerfile則像是一個生成ghost文件的腳本(鏡像構(gòu)建腳本),這個腳本會指定去哪里下載哪個版本的window系統(tǒng),再去哪里下載哪些軟件并安裝,再修改哪些配置文件,等等。本文主要講的是,如何從容器構(gòu)建鏡像(把現(xiàn)有系統(tǒng)制作成ghost文件),和如何使用Dockerfile構(gòu)建鏡像(使用腳本生成ghost文件)。
兩種方式構(gòu)建鏡像的主要步驟:
1、從容器構(gòu)建鏡像(以下簡稱容器鏡像)
創(chuàng)建一個容器,比如使用tomcat:latest鏡像創(chuàng)建一個tomcat-test容器
修改tomcat-test容器的文件系統(tǒng),比如修改tomcat的server.xml文件中的默認(rèn)端口
使用commit命令提交鏡像
2、使用Dockerfile構(gòu)建鏡像(以下簡稱Dockerfile鏡像)
編寫Dockerfile文件
使用build命令構(gòu)建鏡像
兩種構(gòu)建方式的區(qū)別:
1、容器鏡像的構(gòu)建者可以任意修改容器的文件系統(tǒng)后進(jìn)行發(fā)布,這種修改對于鏡像使用者來說是不透明的,鏡像構(gòu)建者一般也不會將對容器文件系統(tǒng)的每一步修改,記錄進(jìn)文檔中,供鏡像使用者參考。
2、容器鏡像不能(更準(zhǔn)確地說是不建議)通過修改,生成新的容器鏡像。
從鏡像運(yùn)行容器,實際上是在鏡像頂部上加了一層可寫層,所有對容器文件系統(tǒng)的修改,都在這一層中進(jìn)行,不影響已經(jīng)存在的層。比如在容器中刪除一個1G的文件,從用戶的角度看,容器中該文件已經(jīng)沒有了,但從文件系統(tǒng)的角度看,文件其實還在,只不過在頂層中標(biāo)記該文件已被刪除,當(dāng)然這個標(biāo)記為已刪除的文件還會占用鏡像空間。從容器構(gòu)建鏡像,實際上是把容器的頂層固化到鏡像中。
也就是說, 對容器鏡像進(jìn)行修改后,生成新的容器鏡像,會多一層,而且體積只會增大,不會減小。長此以往,鏡像將變得越來越臃腫。Docker提供的export和import命令可以一定程度上處理該問題,但也并不是沒有缺點(diǎn)。
3、容器鏡像依賴的父鏡像變化時,容器鏡像必須進(jìn)行重新構(gòu)建。如果沒有編寫自動化構(gòu)建腳本,而是手工構(gòu)建的,那么又要重新修改容器的文件系統(tǒng),再進(jìn)行構(gòu)建,這些重復(fù)勞動其實是沒有價值的。
4、Dockerfile鏡像是完全透明的,所有用于構(gòu)建鏡像的指令都可以通過Dockerfile看到。甚至你還可以遞歸找到本鏡像的任何父鏡像的構(gòu)建指令。也就是說,你可以完全了解一個鏡像是如何從零開始,通過一條條指令構(gòu)建出來的。
5、Dockerfile鏡像需要修改時,可以通過修改Dockerfile中的指令,再重新構(gòu)建生成,沒有任何問題。
6、Dockerfile可以在GitHub等源碼管理網(wǎng)站上進(jìn)行托管,DockerHub自動關(guān)聯(lián)源碼進(jìn)行構(gòu)建。當(dāng)你的Dockerfile變動,或者依賴的父鏡像變動,都會觸發(fā)鏡像的自動構(gòu)建,非常方便。
不管是官方還是我個人,都推薦使用第二種方式構(gòu)建鏡像。
關(guān)于Dockerfile里面指令的詳細(xì)說明,這里就不一一列出了,大家可以參考官方文檔,或關(guān)注我之后的文章,當(dāng)然網(wǎng)上也是一搜一大堆。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Docker images導(dǎo)出和導(dǎo)入操作
這篇文章主要介紹了Docker images導(dǎo)出和導(dǎo)入操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Docker實現(xiàn)同Ip網(wǎng)段聯(lián)通的實現(xiàn)
這篇文章主要介紹了Docker實現(xiàn)同Ip網(wǎng)段聯(lián)通的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12
Docker搭建 Nginx+PHP+MySQL 環(huán)境并部署WordPress實踐
本文給大家分享的是作者基于Docker搭建 Nginx+PHP+MySQL 環(huán)境并部署WordPress的詳細(xì)過程,非常的全面,有需要的小伙伴可以參考下2017-02-02
使用Docker Compose搭建 Confluence的教程
本文將介紹如何使用 Docker Compose 快速搭建 Confluence 、以及如何和 Traefik 一同使用,如果你看過之前的內(nèi)容,跟隨本文應(yīng)該能在十分鐘內(nèi)解決戰(zhàn)斗,感興趣的朋友快來看看吧2021-06-06
Docker容器實現(xiàn)MySQL多源復(fù)制場景分析
這篇文章主要介紹了Docker容器實現(xiàn)MySQL多源復(fù)制,通過本文學(xué)習(xí)可以掌握多源復(fù)制的好處,通過使用場景分析給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06

