1.什么是容器
我們?cè)谏钪腥萜饔泻芏?比如盤(pán)子,碗,一個(gè)桶都可以理解為一個(gè)容器
而在Linux中容器就是在隔離的環(huán)境運(yùn)行的一個(gè)進(jìn)程,如果進(jìn)程停止,容器就會(huì)銷(xiāo)毀.隔離的環(huán)境擁有自己的系統(tǒng)文件,ip地址,主機(jī)名等
進(jìn)程:正在運(yùn)行的程序,代碼運(yùn)行起來(lái)的時(shí)候就是一個(gè)進(jìn)程
2.什么是docker
docker只是諸多容器中的一個(gè)佼佼者,或者說(shuō)是docker讓容器被我們熟知.
3.什么是內(nèi)核
(Linux)內(nèi)核是(Linux)操作系統(tǒng)的核心,一般包含五大部分:進(jìn)程管理城舞、存儲(chǔ)管理、文件管理、設(shè)備管理和網(wǎng)絡(luò)管理县昂,是一組程序模塊,具有訪問(wèn)硬件設(shè)備和所有主存空間的權(quán)限茅糜,是僅有的能夠執(zhí)行特權(quán)指令的程序七芭。主要功能是:資源抽象、資源分配蔑赘、資源共享狸驳。(資源是指CPU预明、內(nèi)存等。)在內(nèi)核基礎(chǔ)上掛載第三方軟件便構(gòu)成操作系統(tǒng)耙箍,Ubuntu撰糠、RedHat、Fedora辩昆、Debian等都是基于Linux內(nèi)核(版本號(hào)可能不同)的不同操作系統(tǒng)阅酪。
內(nèi)核函數(shù)對(duì)用戶(hù)是完全透明的,用戶(hù)想要調(diào)用內(nèi)核函數(shù)只有兩種途徑:一是 應(yīng)用程序→系統(tǒng)調(diào)用(程序接口)→操作系統(tǒng)汁针;二是 操作命令→系統(tǒng)程序(作業(yè)接口)→操作系統(tǒng)术辐。
4.虛擬機(jī)和容器的區(qū)別
1)虛擬機(jī)是需要完全仿制一套開(kāi)機(jī)流程,比如他要模擬計(jì)算機(jī)的硬件,bios自檢,啟動(dòng)引導(dǎo),加載內(nèi)核等等之類(lèi)的,所以虛擬機(jī)啟動(dòng)分鐘級(jí)別很緩慢,并且啟動(dòng)一個(gè)虛擬機(jī)就相當(dāng)于模擬了一個(gè)真實(shí)的電腦,所以?xún)?nèi)存,CPU占用都是和真機(jī)一樣的,內(nèi)核是獨(dú)立的,資源占用大.
2)容器他不用模擬計(jì)算機(jī)的硬件,因?yàn)樗退拗鳈C(jī)共用一個(gè)內(nèi)核,而容器為了優(yōu)化,也把第一個(gè)進(jìn)程改為了服務(wù)進(jìn)程,因?yàn)樗恍枰M硬件,自然跳過(guò)了很長(zhǎng)的開(kāi)機(jī)時(shí)間,直接用宿主機(jī)內(nèi)核,啟動(dòng),秒級(jí)別,輕量,損耗少,性能高
3)優(yōu)缺點(diǎn)
虛擬機(jī)優(yōu)點(diǎn):
內(nèi)核級(jí)隔離,每個(gè)虛擬機(jī)都有自己的一套系統(tǒng),隔離性能好.
容器優(yōu)點(diǎn):
啟動(dòng)快,輕量,損耗少,性能高
5.容器的發(fā)展歷史
早在1979年施无,就有了容器技術(shù)的雛形辉词,changeroot技術(shù)的引進(jìn)開(kāi)啟了進(jìn)程隔離大門(mén)。2000年猾骡,F(xiàn)reeBSD Jails技術(shù)將計(jì)算機(jī)分為多個(gè)獨(dú)立的小型計(jì)算系統(tǒng)瑞躺。2006年,谷歌推出了Process Containers技術(shù)兴想,在進(jìn)程隔離的基礎(chǔ)上幢哨,進(jìn)行了計(jì)算資源的限制。2008年嫂便,LXC作為第一個(gè)具有完整意義的容器管理工具捞镰。2013年,LMCTFY實(shí)現(xiàn)了Linux應(yīng)用程序容器化顽悼,成為libcontainer的重要組成部分曼振。同年,Docker出現(xiàn)蔚龙,容器的關(guān)注度出現(xiàn)爆發(fā)性的增長(zhǎng)冰评。Docker最初使用LXC,后來(lái)替換為libcontainer木羹。
6.docker是用的隔離技術(shù)
1)cgroups限制一個(gè)進(jìn)程能夠使用的資源cpu 內(nèi)存 硬盤(pán)io
2)namespaces 資源隔離
7.docker和lxc的關(guān)系
在2013年Docker剛發(fā)布的時(shí)候甲雅,它是一款基于LXC的開(kāi)源容器管理引擎。把LXC復(fù)雜的容器創(chuàng)建與使用方式簡(jiǎn)化為Docker自己的一套命令體系坑填。隨著Docker的不斷發(fā)展抛人,它開(kāi)始有了更為遠(yuǎn)大的目標(biāo),那就是反向定義容器的實(shí)現(xiàn)標(biāo)準(zhǔn)脐瑰,將底層實(shí)現(xiàn)都抽象化到Libcontainer的接口妖枚。這就意味著,底層容器的實(shí)現(xiàn)方式變成了一種可變的方案苍在,無(wú)論是使用namespace绝页、cgroups技術(shù)抑或是使用systemd等其他方案荠商,只要實(shí)現(xiàn)了Libcontainer定義的一組接口,Docker都可以運(yùn)行续誉。這也為Docker實(shí)現(xiàn)全面的跨平臺(tái)帶來(lái)了可能莱没。