Docker 常見面試題匯總


Docker 常見面試題匯總

  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 快速查看本 地容器。

鏡像相關

  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 鏡像應該遵循哪些原則?
    答:整體遠側上,盡量保持鏡像功能的明確和內容的精簡,要點包括: l 盡量選取滿足需求但較小的基礎系統鏡像,建議選擇 debian:wheezy 鏡像,僅有 86MB 大小 l 清理編譯生成文件、安裝包的緩存等臨時文件 l 安裝各個軟件時候要指定准確的版本號,並避免引入不需要的依賴 l 從安全的角度考慮,應用盡量使用系統的庫和依賴 l 使用 Dockerfile 創建鏡像時候要添加.dockerignore 文件或使用干凈的工作目錄 容器相關
  5. 容器退出后,通過 docker ps 命令查看不到,數據會丟失么?
    答:容器退出后會處於終止(exited)狀態,此時可以通過 docker ps -a 查看,其中 數據不會丟失,還可以通過 docker start 來啟動,只有刪除容器才會清除數據。
  6. 如何停止所有正在運行的容器?
    答:使用 docker kill $(sudo docker ps -q)
  7. 如何清理批量后台停止的容器?
    答:使用 docker rm $(sudo docker ps -a -q)
  8. 如何臨時退出一個正在交互的容器的終端,而不終止它?
    答:按 Ctrl+p,后按 Ctrl+q,如果按 Ctrl+c 會使容器內的應用進程終止,進而會使 容器終止。
  9. 很多應用容器都是默認后台運行的,怎么查看它們的輸出和日志信息?
    答:使用 docker logs,后面跟容器的名稱或者 ID 信息
  10. 使用 docker port 命令映射容器的端口時,系統報錯 Error: No public port ‘80’
    published for …,是什么意思?
    答:創建鏡像時 Dockerfile 要指定正確的 EXPOSE 的端口,容器啟動時指定 PublishAllport=true
  11. 可以在一個容器中同時運行多個應用進程嗎?
    答:一般不推薦在同一個容器內運行多個應用進程,如果有類似需求,可以通過額外 的進程管理機制,比如 supervisord 來管理所運行的進程
  12. 如何控制容器占用系統資源(CPU,內存)的份額?
    答:在使用 docker create 命令創建容器或使用 docker run 創建並運行容器的時候, 可以使用-c|–cpu-shares[=0]參數來調整同期使用 CPU 的權重,使用-m|–memory 參數來調整容器使用內存的大小。

倉庫相關

  1. 倉庫(Repository)、注冊服務器(Registry)、注冊索引(Index)有何關系?
    答:首先,倉庫是存放一組關聯鏡像的集合,比如同一個應用的不同版本的鏡像,注 冊服務器是存放實際的鏡像的地方,注冊索引則負責維護用戶的賬號,權限,搜索, 標簽等管理。注冊服務器利用注冊索引來實現認證等管理。
  2. 從非官方倉庫(如:http://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 則在如下的幾個方面進行了改進: l 移植性:通過抽象容器配置,容器可以實現一個平台移植到另一個平台; l 鏡像系統:基於 AUFS 的鏡像系統為容器的分發帶來了很多的便利,同時共同的 鏡像層只需要存儲一份,實現高效率的存儲; l 版本管理:類似於 GIT 的版本管理理念,用戶可以更方面的創建、管理鏡像文件; l 倉庫系統:倉庫系統大大降低了鏡像的分發和管理的成本; l 周邊工具:各種現有的工具(配置管理、雲平台)對 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
  4. Docker 能在非 Linux 平台(Windows+MacOS)上運行嗎?
    答:可以
  5. 如何將一台宿主機的 docker 環境遷移到另外一台宿主機?
    答:停止 Docker 服務,將整個 docker 存儲文件復制到另外一台宿主機上,然后調整 另外一台宿主機的配置即可
  6. 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