Docker 類面試題(常見問題)


Docker 常見問題匯總
 
鏡像相關
  • 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鏡像應該遵循哪些原則?
整體遠側上,盡量保持鏡像功能的明確和內容的精簡,要點包括: 
# 盡量選取滿足需求但較小的基礎系統鏡像,建議選擇debian:wheezy鏡像,僅有86MB大小 
# 清理編譯生成文件、安裝包的緩存等臨時文件 
# 安裝各個軟件時候要指定准確的版本號,並避免引入不需要的依賴 
# 從安全的角度考慮,應用盡量使用系統的庫和依賴 
# 使用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|–cpu-shares[=0]參數來調整同期使用CPU的權重,使用-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_OPTS=”–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則在如下的幾個方面進行了改進:
移植性:通過抽象容器配置,容器可以實現一個平台移植到另一個平台; 
鏡像系統:基於AUFS的鏡像系統為容器的分發帶來了很多的便利,同時共同的鏡像層只需要存儲一份,實現高效率的存儲; 
版本管理:類似於GIT的版本管理理念,用戶可以更方面的創建、管理鏡像文件; 
倉庫系統:倉庫系統大大降低了鏡像的分發和管理的成本; 
周邊工具:各種現有的工具(配置管理、雲平台)對Docker的支持,以及基於Docker的Pass、CI等系統,讓Docker的應用更加方便和多樣化。
  • 2 、Docker與Vagrant有何不同?
兩者的定位完全不同 
Vagrant類似於Boot2Docker(一款運行Docker的最小內核),是一套虛擬機的管理環境,Vagrant可以在多種系統上和虛擬機軟件中運行,可以在Windows。Mac等非Linux平台上為Docker支持,自身具有較好的包裝性和移植性。 
原生Docker自身只能運行在Linux平台上,但啟動和運行的性能都比虛擬機要快,往往更適合快速開發和部署應用的場景。
  • 3、開發環境中Docker與Vagrant該如何選擇?
Docker不是虛擬機,而是進程隔離,對於資源的消耗很少,單一開發環境下Vagrant是虛擬機上的封裝,虛擬機本身會消耗資源。
Other FAQ
  • 1、Docker能在非Linux平台(Windows+MacOS)上運行嗎?
可以
  • 2 、如何將一台宿主機的docker環境遷移到另外一台宿主機?
停止Docker服務,將整個docker存儲文件復制到另外一台宿主機上,然后調整另外一台宿主機的配置即可
  • 3、Docker容器創建后,刪除了/var/run/netns 目錄下的網絡名字空間文件,可以手動恢復它:
# 查看容器進程ID,比如1234 sudo docker inspect --format='{{. State.pid}}' $container_id 1234 # 到proc目錄下,把對應的網絡名字空間文件鏈接到/var/run/netns,然后通過正常的系統命令查看操作容器的名字空間。
 
 
1、Docker 和虛擬機有啥不同? 
Docker 是輕量級的沙盒,在其中運行的只是應用,虛擬機里面還有額外的系統。
2、Docker 安全么? 
Docker 利用了 Linux 內核中很多安全特性來保證不同容器之間的隔離,並且通過簽名機制來對鏡像進行驗證。大量生產環境的部署證明,Docker 雖然隔離性無法與虛擬機相比,但仍然具有極高的安全性。
3、如何清理后台停止的容器? 
可以使用 sudo docker rm $sudo( docker ps -a -q) 命令。
4、如何查看鏡像支持的環境變量? 
可以使用 docker run IMAGE env 命令。
5、當啟動容器的時候提示:exec format error? 如何解決問題 
檢查啟動命令是否有可執行權限,進入容器手工運行腳本進行排查。
6、本地的鏡像文件都存放在哪里? 
與 Docker 相關的本地資源都存放在/var/lib/docker/目錄下,其中container目錄存放容器信息,graph目錄存放鏡像信息,aufs目錄下存放具體的內容文件。
7、如何退出一個鏡像的bash,而不終止它? 
按 Ctrl-p Ctrl-q。
8、退出容器時候自動刪除? 
使用 –rm 選項,例如 sudo docker run –rm -it ubuntu
9、怎么快速查看本地的鏡像和容器? 
可以通過docker images來快速查看本地鏡像;通過docker ps -a快速查看本地容器。


免責聲明!

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



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