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