更新時(shí)間:2020-11-04 17:31:15 來源:動(dòng)力節(jié)點(diǎn) 瀏覽17874次
Docker作為目前最流行的開源應(yīng)用容器引擎之一,自2013年以來非常火熱,無論是從 github 上的代碼活躍度,還是Redhat在RHEL6.5中集成對Docker的支持, 就連 Google 的 Compute Engine 也支持 docker 在其之上運(yùn)行。所以,Docker也理所當(dāng)然的成為了目前各大互聯(lián)網(wǎng)公司招聘一些相關(guān)崗位的面試熱門考點(diǎn),為此,我們?yōu)榇蠹铱偨Y(jié)了10道熱門常考的Docker面試題。
1.Docker常用命令?
2.docker是怎么工作的?
實(shí)際上docker使用了常見的CS架構(gòu),也就是client-server模式,docker client負(fù)責(zé)處理用戶輸入的各種命令,比如docker build、docker run,真正工作的其實(shí)是server,也就是docker demon,值得注意的是,docker client和docker demon可以運(yùn)行在同一臺(tái)機(jī)器上。
Docker是一個(gè)Client-Server結(jié)構(gòu)的系統(tǒng),Docker守護(hù)進(jìn)程運(yùn)行在主機(jī)上, 然后通過Socket連接從客戶端訪問,守護(hù)進(jìn)程從客戶端接受命令并管理運(yùn)行在主機(jī)上的容器。守護(hù)進(jìn)程和客戶端可以運(yùn)行在同一臺(tái)機(jī)器上。
3.docker容器之間怎么隔離?
Linux中的PID、IPC、網(wǎng)絡(luò)等資源是全局的,而NameSpace機(jī)制是一種資源隔離方案,在該機(jī)制下這些資源就不再是全局的了,而是屬于某個(gè)特定的NameSpace,各個(gè)NameSpace下的資源互不干擾。
雖然有了NameSpace技術(shù)可以實(shí)現(xiàn)資源隔離,但進(jìn)程還是可以不受控的訪問系統(tǒng)資源,比如CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等,為了控制容器中進(jìn)程對資源的訪問,Docker采用control groups技術(shù)(也就是cgroup),有了cgroup就可以控制容器中進(jìn)程對系統(tǒng)資源的消耗了,比如你可以限制某個(gè)容器使用內(nèi)存的上限、可以在哪些CPU上運(yùn)行等等。
有了這兩項(xiàng)技術(shù),容器看起來就真的像是獨(dú)立的操作系統(tǒng)了。
4.容器與主機(jī)之間的數(shù)據(jù)拷貝命令?
Docker cp命令用于窮奇與主機(jī)之間的數(shù)據(jù)拷貝
主機(jī)到哦容器:docker cp /www 96f7f14e99ab:/www/
容器到主機(jī):docker cp 96f7f14e99ab:/www /tmp
5.如何在生產(chǎn)中監(jiān)控docker?
Docker提供docker:stats和docker事件等工具來監(jiān)控生產(chǎn)中的docker。我們可以使用這些命令獲取重要統(tǒng)計(jì)數(shù)據(jù)的報(bào)告。
Docker統(tǒng)計(jì)數(shù)據(jù):當(dāng)我們使用容器ID調(diào)用docker stats時(shí),我們獲得容器的CPU,內(nèi)存使用情況等。它類似于Linux中的top命令。
Docker事件:docker事件是一個(gè)命令,用于查看docker守護(hù)程序中正在進(jìn)行的活動(dòng)流。一些常見的docker事件是:attach,commit,die,detach,rename,destroy等。我們還可以使用各種選項(xiàng)來限制或過濾我們感性其的事件。
6.DockerFile中的命令COPY和ADD命令有什么區(qū)別?
COPY和ADD的區(qū)別時(shí)COPY的SRC只能是本地文件,其他用法一致。
7.一個(gè)完整的Docker由哪些部分組成?
8.進(jìn)入容器的方法有哪些?
9.Docker與虛擬機(jī)有何不同?
Docker不是虛擬化方法。它依賴于實(shí)際實(shí)現(xiàn)基于容器的虛擬化或操作系統(tǒng)級(jí)虛擬化的其他工具。為此,Docker最初使用LXC驅(qū)動(dòng)程序,然后移動(dòng)到libcontainer現(xiàn)在重命名為runc。Docker主要專注于在應(yīng)用程序容器內(nèi)自動(dòng)部署應(yīng)用程序。應(yīng)用程序容器旨在打包和運(yùn)行單個(gè)服務(wù),而系統(tǒng)容器則設(shè)計(jì)為運(yùn)行多個(gè)進(jìn)程,如虛擬機(jī)。因此,Docker被視為容器化系統(tǒng)上的容器管理或應(yīng)用程序部署工具。
(1)與虛擬機(jī)不同,容器不需要引導(dǎo)操作系統(tǒng)內(nèi)核,因此可以在不到一秒的時(shí)間內(nèi)創(chuàng)建容器。此功能使基于容器的虛擬化比其他虛擬化方法更加獨(dú)特和可取。
由于基于容器的虛擬化為主機(jī)增加了很少或沒有開銷,因此基于容器的虛擬化具有接近本機(jī)的性能
(2)對于基于容器的虛擬化,與其他虛擬化不同,不需要其他軟件。
主機(jī)上的所有容器共享主機(jī)的調(diào)度程序,從而節(jié)省了額外資源的需求。
(3)與虛擬機(jī)映像相比,容器狀態(tài)(Docker或LXC映像)的大小很小,因此容器映像很容易分發(fā)。
(4)容器中的資源管理是通過cgroup實(shí)現(xiàn)的。Cgroups不允許容器消耗比分配給它們更多的資源。雖然主機(jī)的所有資源都在虛擬機(jī)中可見,但無法使用。
這可以通過在容器和主機(jī)上同時(shí)運(yùn)行top或htop來實(shí)現(xiàn)。所有環(huán)境的輸出看起來都很相似。
10.什么是聯(lián)合文件系統(tǒng)(UnionFS)?
docker的鏡像實(shí)際上由一層一層的文件系統(tǒng)組成,這種層級(jí)的文件系統(tǒng)就是UnionFS。UnionFS是一種分層、輕量級(jí)并且高性能的文件系統(tǒng)。聯(lián)合加載會(huì)把各層文件系統(tǒng)疊加起來,這樣最終的文件系統(tǒng)會(huì)包含所有底層的文件和目錄。
以上就是為大家總結(jié)的10道Docker面試題,涵蓋了Docker的大部分考點(diǎn),當(dāng)然僅這10道Docker面試題對于全面掌握Docker的所有知識(shí)還遠(yuǎn)遠(yuǎn)不夠,而且java面試也不僅只考Docker這一個(gè)知識(shí)點(diǎn),真正想要通過面試還是要打好Java基礎(chǔ),在海量Java面試題里奮戰(zhàn),才能成功拿到你想要的offer。
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743