Docker面試題


1、什么是Docker?

Docker是一個容器化平台,它以容器的形式將你的應用程序及所有的依賴項打包在一起,以確保你的應用程序在任何環境中無縫運行。

2、什么是Docker鏡像?

Docker鏡像是Docker容器的源代碼,Docker鏡像用於創建容器,使用Build命令創建鏡像。

3、什么是Docker容器?

Docker容器包括應用程序及所有的依賴項,作為操作系統的獨立進程運行。

4、Docker容器有幾種狀態?

四種狀態:運行、已停止、重新啟動、已退出。

5、DockerFile中最常見的指定是什么?

6、DockerFile中的命令COPY和ADD命令有什么區別?

COPY和ADD的區別是COPY的SRC只能是本地文件,其他用法一致。

7、Docker的常用命令?

 

 

8、容器與主機之間的數據拷貝命令?

Docker cp命令用於容器與主機之間的數據拷貝

  • 主機到容器:docker cp /www   96f7f14e99ab:/www/
  • 容器到主機:docker cp 96f7f14e99ab:/www    /tmp

9、啟動nginx容器(隨機端口映射),並掛載本地文件目錄到容器html的命令?

Docker run -d -p --name nginx2 -v /home/nginx:/usr/share/nginx/html nginx

10、解釋一下dockerfile的ONBUILD指令?

當鏡像用作另一個鏡像構建的基礎時,ONBUILD指令向鏡像添加將在稍后執行的觸發指令。如果要構建將用作構建其他鏡像的基礎的鏡像(例如,可以使用特定於用戶的配置自定義的應用程序構建環境或守護程序),這將非常有用。

11、什么是docker Swarm?

Docker Swarm是docker的本地集群。它將docker主機池轉變為單個虛擬docker主機。Docker Swarm提供標准的docker API,任何已經與docker守護進程通信的工具都可以使用Swarm透明地擴展到多個主機。

12、如何在生產中監控docker?

1.Docker提供docker:stats和docker事件等工具來監控生產中的docker。我們可以使用這些命令獲取重要統計數據的報告。
2.Docker統計數據:當我們使用容器ID調用docker stats時,我們獲得容器的CPU,內存使用情況等。它類似於Linux中的top命令。
3.Docker事件:docker事件是一個命令,用於查看docker守護程序中正在進行的活動流。一些常見的docker事件是:attach,commit,die,detach,rename,destroy等。我們還可以使用各種選項來限制或過濾我們感性其的事件。

13、Docker如何在非Linux系統中運行容器?

Docker for Mac和Windows都使用Linux VM來運行容器。Docker Toolbox用於在Virtual Box VM中運行容器。但是,罪行的docker早Windows中使用Hyper-V,在MAC中使用Hypervisor.framework。

鏡像相關

1、如何批量清理臨時鏡像文件?

可以使用sudo docker rmi $(sudo docker images -q -f danging=true)命令

2、如何查看鏡像支持的環境變量?

使用sudo docker run IMAGE env

3、本地的鏡像文件都存放在哪里?

於docker相關的本地資源存在/var/lib/docker/目錄下,其中container目錄存放容器信息,graph目錄存放鏡像信息,aufs目錄下存放具體的鏡像底層文件。

4、構建docker鏡像應該遵循哪些原則?

整體原則上,盡量保持鏡像功能的明確和內容的精簡,要點包括:

1.盡量選取滿足需求但較小的基礎系統鏡像,建議選擇debian:wheezy鏡像,僅有86MB大小。
2.清理編譯生成文件、安裝包的緩存等臨時文件。
3.安裝哥哥軟件時候要指定准確的版本號,並避免引入不需要的依賴。
4.從安全的角度考慮,應用盡量使用系統的庫和依賴。
5.使用dockerfile創建鏡像時候要添加.dockerignore文件或使用干凈的工作目錄。 

容器相關

1、容器退出后,通過docker ps命令查看,數據會丟失么?

容器退出后會處於終止(exited)狀態,此時可以通過docker ps -a查看,其中數據不會丟失,還可以通過docker start來啟動,只有刪除容器才會清除數據。

2、如何停止所有正在運行的容器?

docker kill $(sudo docker ps -q)

3、如何批量清理后台停止容器?

 docker rm$(sudo docker ps -a -q)

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

按Ctrl+p,后按Ctrl+q,如果按Ctrl+c會使容器內的應用進程終止,進而會使容器終止。

5、很多應用容器都是默認后台運行的,怎么查看他們的輸出和日志信息?

使用docker logs,后面跟容器的名稱或者ID信息

6、使用docker port命令映射容器的端口時,系統報錯Error:NO public port ‘80’ published for …,是什么意思?

創建鏡像時dockerfile要指定正確的EXPOSE的端口,容器啟動時指定PublishAllport=true

7、可以在一個容器中同時運行多個應用進程嗎?

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

8、如何控制容器占用系統資源(CPU,內存)的份額?

在使用docker create命令創建容器或使用docker run 創建並運行容器的時候,可以使用-c|-spu-shares[=0]參數來調整同期使用SPU的權重,使用-m|-memory參數來調整容器使用內存的大小。

倉庫相關

1、倉庫(Repository)、注冊服務器(Registry)、注冊 索引(Index)有和關系?

首先,倉庫是存放一組關聯鏡像的集合,比如同一個應用的不同版本的鏡像,注冊服務器時存放實際的鏡像的地方,注冊索引則負責維護用戶的賬號、權限、搜索、標簽等管理。注冊服務器利用注冊索引來實現認證等管理。

2、從非官方倉庫(如:dl.dockerpool.com)下載鏡像的時候,有時候會提示”Error:Invaild registry endpoint https://dl.docker.com:5000/v1/…”?

Docker自1.3.0版本往后以來,加強了對鏡像安全性的驗證,需要手動添加對非官方倉庫的信任。DOCKER_ORTS=”-insecure-registry dl.dockerpool.com:5000”重啟docker服務。

配置相關

1、Docker的配置文件放在那里。如何修改配置?

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

2、如何更改docker的默認存儲設置?

Docker的默認存放位置是/var/lib/docker,如果希望將docker的本地文件存儲到其他分區,可以使用Linux軟連接的方式來做。

Docker與虛擬化

1、docker與LXC(Linux Container)有何不同?

LXC利用Linux上相關技術實現容器,docker則在如下的幾個方面進行了改進:

 

 

2、Docker於Vagrant有何不同?

兩者的定位完全不同

Vagrant類似於Boot2Docker(一款運行Docker的最小內核),是一套虛擬機的管理環境,Vagrant可以在多種系統上和虛擬機軟件中運行,可以在Windows、Mac等非Linux平台上為Docker支持,自身具有較好的包裝性和移植性。原生Docker自身只能運行在Linux平台上,但啟動和運行的性能比虛擬機要快,往往更適合快速開發和部署應用的場景。 

3、開發環境中Docker與Vagrant該如何選擇?

Docker不是虛擬機,而是進程隔離,對於資源的消耗很少,單一開發環境下Vagrant是虛擬機上的封裝,虛擬機本身會消耗資源.

Other FAQ

1、如何將一台宿主機的docker環境遷移到另外一台宿主機?

停止docker服務,將整個docker存儲文件復制到另外一太宿主機上,然后調整另外一台宿主機的配置即可。

2、Docker容器創建后,刪除了/var/run/netns目錄下的網絡名字空間文件,可以手動恢復它:

查看容器進程ID,比如1234

 Sudo docker inspect --format=’{{. State.pid}}’ $container_id 1234

到proc目錄下,把對應的網絡名字空間文字鏈接到/var/run/netns,然后通過正常的系統命令查看操作容器的名字空間


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM