Docker 基礎(chǔ)(一)
????“It works on my machine”,曾經(jīng)程序員的工作除了調(diào)試代碼還要調(diào)試環(huán)境,每一次項(xiàng)目的遷移、發(fā)布都要耗費(fèi)巨量精力,Docker技術(shù)的出現(xiàn)幫我們解決了這個(gè)問題。Docker是一個(gè)開源的應(yīng)用容器引擎,基于Go語言開發(fā),Docker可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級(jí)、可移植的融通器中,然后發(fā)布到任何流行的系統(tǒng)。
????也就是說Docker將“my machine”的環(huán)境完美復(fù)刻到了任何一個(gè)軟件運(yùn)行的環(huán)境中,程序員只需要關(guān)心程序能不能在自己的機(jī)器上跑起來,就可以保證程序能在任何地方運(yùn)行,這種技術(shù)幾乎消除了環(huán)境調(diào)試對(duì)開發(fā)人員的精神消耗。
????什么是容器(container)?容器可以理解為是一個(gè)運(yùn)行在主機(jī)上的獨(dú)立于其他進(jìn)程的沙箱進(jìn)程,這種進(jìn)程的隔離使用的是linux的kernel namespaces(內(nèi)核命名空間)和cgroups(Control Groups控制組)能力。
????容器的特性可以歸納為以下幾項(xiàng):
是一個(gè)可運(yùn)行image(鏡像)的實(shí)例,我們可以通過Docker Api或者CLI執(zhí)行對(duì)容器的創(chuàng)建、運(yùn)行等等操作。
容器可以運(yùn)行在任何地方,比如:本地機(jī)器、虛擬機(jī)、云服務(wù)。
容器是可移植的,可以運(yùn)行在任何系統(tǒng)上。
單個(gè)容器是和其他容器隔離的,每個(gè)容器運(yùn)行自己的軟件、二進(jìn)制文件、配置等。
????什么是鏡像(image)?鏡像是一個(gè)運(yùn)行中的容器使用的獨(dú)立的文件系統(tǒng)。這個(gè)獨(dú)立的文件 系統(tǒng)由一個(gè)鏡像提供,并且這個(gè)鏡像包含所有運(yùn)行應(yīng)用所需的所有依賴、配置、二進(jìn)制文件、腳本。鏡像通常包含對(duì)容器的其他配置,比如環(huán)境變量、啟動(dòng)時(shí)的默認(rèn)命令和其他元數(shù)據(jù)。