Docker 包括三個(gè)基本概念:
- 鏡像(Image)
- 容器(Container)
- 倉(cāng)庫(kù)(Repository)
理解了這三個(gè)概念,可以說(shuō)就理解了 Docker 的整個(gè)生命周期秃症。
鏡像(Image) : 一個(gè)特殊的文件系統(tǒng)
眾所周知雹有,操作系統(tǒng)分為內(nèi)核和用戶空間。對(duì)于 Linux 而言垒迂,內(nèi)核啟動(dòng)后,會(huì)掛載 root 文件系統(tǒng)為其提供用戶空間支持,而 Docker 鏡像(Image)畜伐,就相當(dāng)于是一個(gè) root 文件系統(tǒng)。
不過(guò) Docker 鏡像是一個(gè)特殊的文件系統(tǒng)躺率,除了提供容器運(yùn)行時(shí)所需的程序玛界、庫(kù)、資源悼吱、配置等文件外慎框,還包含了為運(yùn)行時(shí)準(zhǔn)備的一些配置參數(shù)(如匿名卷、環(huán)境變量后添、用戶等)笨枯。 鏡像本身是不包含任何動(dòng)態(tài)數(shù)據(jù)的,其內(nèi)容在構(gòu)建之后也不會(huì)被改變遇西。
Docker 設(shè)計(jì)時(shí)馅精,就充分利用 Union FS 的技術(shù),將其設(shè)計(jì)為 分層存儲(chǔ)的架構(gòu) 粱檀,鏡像實(shí)際是由多層文件系統(tǒng)聯(lián)合組成洲敢。
鏡像構(gòu)建時(shí),會(huì)一層層的構(gòu)建茄蚯,前一層是后一層的基礎(chǔ)压彭,每一層構(gòu)建完就不會(huì)再發(fā)生改變,后一層上的任何改變只發(fā)生在自己這一層渗常。 比如壮不,刪除前一層文件的操作,實(shí)際不是真的刪除前一層的文件皱碘,而是僅在當(dāng)前層標(biāo)記為該文件已刪除询一。在最終容器運(yùn)行的時(shí)候,雖然不會(huì)看到這個(gè)文件,但是實(shí)際上該文件會(huì)一直跟隨鏡像健蕊。因此缓醋,在構(gòu)建鏡像的時(shí)候,需要額外小心绊诲,每一層盡量只包含該層需要添加的東西送粱,任何額外的東西應(yīng)該在該層構(gòu)建結(jié)束前清理掉。
分層存儲(chǔ)的特征還使得鏡像的復(fù)用掂之、定制變的更為容易抗俄,甚至可以用之前構(gòu)建好的鏡像作為基礎(chǔ)層,然后進(jìn)一步添加新的層世舰,以定制自己所需的內(nèi)容动雹,構(gòu)建新的鏡像。