最新2022年Docker面試題高級面試題及附答案解析

Docker

題1:如何臨時退出一個正在交互的容器的終端, 而不終止它?

ctrl-p Ctrl-q

如果按ctrl-c往往會讓容器內應用進程終止, 進而會終止容器。

題2:Docker 中一個容器可以同時運行多個應用進程嗎?

一般不推薦在用以容器內運行多個應用進程,如果有類似需求,可以用過額外的進程管理機制,比如supervisord來管理所運行的進程。

題3:Docker的配置文件放在什麼位置,如何修改配置?

Ubuntu系統下Docker的配置文件是/etc/default/docker,CentOS系統配置文件存放在/etc/sysconfig/docker。

題4:如何控制容器佔用系統資源(CPU、內存)的份額?

使用docker [container] create命令創建容器或使用docker [con­tainer] run創建並啓動容器的時候,可以使用-c | - cpu -shares[=O]參數來調整容器使用CPU的權重;使用-ml-memory[=MEMORY]參數來調整容器使用內存的大小。

題5:Docker 有哪些優缺點?

docker優點

1、部署方便

你一定還有印象,在我們最開始學習編程的時候,搭建環境這一步往往會耗費我們好幾個小時的時間,而且其中一個小問題可能需要找很久才能夠解決。你還會得到關於環境搭建方面的團隊其他成員的求助。而有了容器之後,這些都變得非常容易,你的開發環境就只是一個或者幾個容器鏡像的地址,最多再需要一個控制部署流程的執行腳本。或者進一步將你的環境鏡像以及鏡像腳本放入一個git項目,發佈到雲端,需要的時候將它拉到本地就可以了。

2、部署安全

當我們收到一個bug反饋的時候,很多時候心裏面的第一反應一定是“我本地是好的啊”!這種情況的發生就在於環境的不一致,我們在開發過程中的調試往往不能保證其他環境的問題,但是我們卻要爲此買單,這真是一件令人苦惱的事情。有了容器之後,這將很少發生。我們可以通過容器技術將開發環境和測試環境以及生產環境保持版本和依賴上的統一,保證代碼在一個高度統一的環境上執行。而測試環境的統一,也同樣能解決CI流程對環境的要求。

3、隔離性好

不管是開發還是生產,往往我們一臺機器上可能需要跑多個服務,而服務各自需要的依賴配置不盡相同,假如說兩個應用需要使用同一個依賴,或者兩個應用需要的依賴之間會有一些衝突,這個時候就很容易出現問題了。所以同一臺服務器上不同應用提供的不同服務,最好還是將其隔離起來。而容器在這方面有天生的優勢,每一個容器就是一個隔離的環境,你對容器內部提供服務的要求,容器可以自依賴的全部提供。

4、快速回滾

容器之前的回滾機制,一般需要基於上個版本的應用重新部署,且替換掉目前的問題版本。在最初的時代,可能是一套完整的開發到部署的流程,而執行這一套流程往往需要很長的時間。在基於git的環境中,可能是回退某個歷史提交,然後重新部署。這些跟容器技術相比都不夠快,而且可能會引起新的問題(因爲是基於新版本的修改)。而容器技術天生帶有回滾屬性,因爲每個歷史容器或者鏡像都會有保存,而替換一個容器或者某個歷史鏡像是非常快速和簡單的。

5、成本低

這可能是一個最明顯和有用的優點了,在容器出現之前,我們往往構築一個應用就需要一臺新的服務器或者一臺虛機。服務器的購置成本和運維成本都很高,而虛機需要佔用很多不必要的資源。相比之下,容器技術就小巧輕便的多,只需要給一個容器內部構建應用需要的依賴就可以了,這也是容器技術發展迅速的最主要原因。

6、管理成本更低

隨着大環境的發展,docker等容器的使用和學習的成本也是愈發降低,成爲更多開發者和企業的選擇。

docker缺點

1、隔離性

基於hypervisor的虛機技術,在隔離性上比容器技術要更好,它們的系統硬件資源完全是虛擬化的,當一臺虛機出現系統級別的問題,往往不會蔓延到同一宿主機上的其他虛機。但是容器就不一樣了,容器之間共享同一個操作系統內核以及其他組件,所以在收到攻擊之類的情況發生時,更容易通過底層操作系統影響到其他容器。當然,這個問題可以通過在虛機中部署容器來解決,可是這樣又會引出新的問題,比如成本的增加以及下面要提到的問題:性能。

2、性能

不管是虛機還是容器,都是運用不同的技術,對應用本身進行了一定程度的封裝和隔離,在降低應用和應用之間以及應用和環境之間的耦合性上做了很多努力,但是隨機而來的,就會產生更多的網絡連接轉發以及數據交互,這在低併發系統上表現不會太明顯,而且往往不會成爲一個應用的瓶頸(可能會分散於不同的虛機或者服務器上),但是當同一虛機或者服務器下面的容器需要更高併發量支撐的時候,也就是併發問題成爲應用瓶頸的時候,容器會將這個問題放大,所以,並不是所有的應用場景都是適用於容器技術的。

題6:Docker 和 Vagrant 有什麼區別?

Docker和Vagrant的定位完全不同。

Vagrant類似於Boot2Docker(一款運行Docker的最小內核),是一套虛擬機的管理環境,Vagrant可以在多種系統上和虛擬機軟件中運行,可以在Windows、Mac等非Linux平臺上爲Docker支持,自身具有較好的包裝性和移植性。

原生Docker自身只能運行在Linux平臺上,但啓動和運行的性能比虛擬機要快,往往更適合快速開發和部署應用的場景。

題7:什麼是Docker Hub?

Docker hub是一個基於雲的註冊表服務,允許您鏈接到代碼存儲庫,構建鏡像並測試它們,存儲手動推送的鏡像以及指向Docker雲的鏈接,以便可以將鏡像部署到主機。它爲整個開發流程中的容器鏡像發現,分發和變更管理,用戶和團隊協作以及工作流自動化提供了集中資源。

題8:什麼是 Docker 容器?

Docker容器是一個開源的應用容器引擎,讓開發者可以以統一的方式打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何安裝了docker引擎的服務器上(包括流行的Linux機器、windows機器),也可以實現虛擬化。

容器是完全使用沙箱機制,相互之間不會有任何接口(類似iPhone的app)。

幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是,他們不依賴於任何語言、框架包括系統。

題9:Docker 中都有哪些常用命令?

命令 說明
docker pull 拉去或更新指定的鏡像
docker push 將鏡像推送到遠程倉庫
docker rm 刪除容器
docker rmi 刪除鏡像
docker images 列出所有鏡像
docker ps 列出所有容器

題10:Docker 中如何批量清理容器和鏡像文件?

1、清理所有已經停止的容器

docker rm $(docker ps -a -q)

2、清理所有鏡像

docker rmi $(docker images -q)

3、強制清理所有鏡像

docker rmi -f $(docker images -q)

4、清理過濾出來的鏡像

docker rmi $(docker images | grep "關鍵字" | awk '{print $3}')

題11:docker-如何臨時退出正在交互容器終端

題12:如何備份系統中所有的鏡像

題13:如何停止所有正在運行的容器

題14:構建-docker-鏡像應該遵循哪些原則

題15:容器退出後-通過-docker-ps-命令查看不到數據會丟失麼

題16:docker-和-lxc-有什麼區別

題17:什麼是-docker

題18:docker-鏡像和層有什麼區別

題19:docker-安全嗎-

題20:如何獲取某個容器的-pio-信息

題21:docker-容器和虛擬機有什麼區別

題22:dockerfile中-copy-和-add-命令有什麼區別

題23:什麼是-docker-鏡像

題24:docker-中什麼是-container

題25:開發環境中-docker-與-vagrant-該如何選擇

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章