Docker基本概念
Docker鏡像
Docker 鏡像是一個(gè)特殊的文件系統(tǒng)匠襟,除了提供容器運(yùn)行時(shí)所需的程序钝侠、庫、資源酸舍、配置等文件外帅韧,還包含了一些為運(yùn)行時(shí)準(zhǔn)備的一些配置參數(shù)(如匿名卷、環(huán)境變量啃勉、用戶等)忽舟。鏡像不包含任何動(dòng)態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會被改變淮阐。
因?yàn)殓R像包含操作系統(tǒng)完整的 root 文件系統(tǒng)叮阅,其體積往往是龐大的,因此在 Docker 設(shè)計(jì)時(shí)泣特,就充分利用 Union FS 的技術(shù)浩姥,將其設(shè)計(jì)為分層存儲的架構(gòu)。所以嚴(yán)格來說状您,鏡像并非是像一個(gè) ISO 那樣的打包文件勒叠,鏡像只是一個(gè)虛擬的概念兜挨,其實(shí)際體現(xiàn)并非由一個(gè)文件組成,而是由一組文件系統(tǒng)組成缴饭,或者說暑劝,由多層文件系統(tǒng)聯(lián)合組成。
Docker 容器
鏡像(Image)和容器(Container)的關(guān)系颗搂,就像是面向?qū)ο蟪绦蛟O(shè)計(jì)中的類和實(shí)例一樣担猛,鏡像是靜態(tài)的定義,容器是鏡像運(yùn)行時(shí)的實(shí)體丢氢。容器可以被創(chuàng)建傅联、啟動(dòng)、停止疚察、刪除蒸走、暫停等。
容器的實(shí)質(zhì)是進(jìn)程貌嫡,但與直接在宿主執(zhí)行的進(jìn)程不同比驻,容器進(jìn)程運(yùn)行于屬于自己的獨(dú)立的 命名空間。因此容器可以擁有自己的 root 文件系統(tǒng)岛抄、自己的網(wǎng)絡(luò)配置别惦、自己的進(jìn)程空間,甚至自己的用戶 ID 空間夫椭。
**按照 Docker 最佳實(shí)踐的要求掸掸,容器不應(yīng)該向其存儲層內(nèi)寫入任何數(shù)據(jù),容器存儲層要保持無狀態(tài)化蹭秋。所有的文件寫入操作扰付,都應(yīng)該使用 數(shù)據(jù)卷(Volume)、或者綁定宿主目錄仁讨,在這些位置的讀寫會跳過容器存儲層羽莺,直接對宿主(或網(wǎng)絡(luò)存儲)發(fā)生讀寫,其性能和穩(wěn)定性更高陪竿。
數(shù)據(jù)卷的生存周期獨(dú)立于容器禽翼,容器消亡,數(shù)據(jù)卷不會消亡族跛。因此闰挡,使用數(shù)據(jù)卷后,容器可以隨意刪除礁哄、重新 run长酗,數(shù)據(jù)卻不會丟失。**
Docker Registry
docker Registry上一個(gè)服務(wù):如果需要在其它服務(wù)器上使用鏡像桐绒,我們就需要一個(gè)集中的存儲夺脾、分發(fā)鏡像的服務(wù) 之拨。
一個(gè) Docker Registry 中可以包含多個(gè)倉庫(Repository);每個(gè)倉庫可以包含多個(gè)標(biāo)簽(Tag)咧叭;每個(gè)標(biāo)簽對應(yīng)一個(gè)鏡像蚀乔。
通常,一個(gè)倉庫會包含同一個(gè)軟件不同版本的鏡像菲茬,而標(biāo)簽就常用于對應(yīng)該軟件的各個(gè)版本吉挣。我們可以通過 <倉庫名>:<標(biāo)簽> 的格式來指定具體是這個(gè)軟件哪個(gè)版本的鏡像。如果不給出標(biāo)簽婉弹,將以 latest 作為默認(rèn)標(biāo)簽睬魂。
mac系統(tǒng)安裝Docker
brew cask install docker
前提的安裝homebrew, 當(dāng)然也可以?去官網(wǎng)上直接下載安裝镀赌,方法比較簡單氯哮。
可以通過如下命令查看安裝的信息
docker info
docker --version
docker-compose --version
docker-machine --version
我們先?試著安裝一下nginx?服務(wù),就下面一行簡單的命令就可以搞定
docker run -d -p 80:80 --name webserver nginx
要停止 Nginx 服務(wù)器并刪除執(zhí)行下面的命令:
docker stop webserver
docker rm webserver
鏡像加速器
如果在國內(nèi)使用docker下載鏡像可能或很慢商佛,那么我就需要配置鏡像加速器喉钢,?如果選用阿里的鏡像加速器的可以參考下面的地址
阿里鏡像加速器