Docker 常見面試題彙總
阿新 • • 發佈:2021-08-10
Docker 常見面試題彙總
- Docker 和虛擬機器有啥不同?
答:Docker 是輕量級的沙盒,在其中執行的只是應用,虛擬機器裡面還有額外的系統。 - Docker 安全麼?
答:Docker 利用了 Linux 核心中很多安全特性來保證不同容器之間的隔離,並且通
過簽名機制來對映象進行驗證。大量生產環境的部署證明,Docker 雖然隔離性無法與
虛擬機器相比,但仍然具有極高的安全性。 - 如何清理後臺停止的容器?
答:可以使用 sudo docker rm $sudo( docker ps -a -q) 命令。 - 如何檢視映象支援的環境變數?
答:可以使用 docker run IMAGE env 命令。 - 當啟動容器的時候提示:exec format error?如何解決問題
答:檢查啟動命令是否有可執行許可權,進入容器手工執行指令碼進行排查。 - 本地的映象檔案都存放在哪裡?
答:與 Docker 相關的本地資源都存放在/var/lib/docker/目錄下,其中 container 目
錄存放容器資訊,graph 目錄存放映象資訊,aufs 目錄下存放具體的內容檔案。 - 如何退出一個映象的 bash,而不終止它?
答:按 Ctrl-p Ctrl-q。 - 退出容器時候自動刪除?
答:使用 –rm 選項,例如 sudo docker run –rm -it ubuntu - 怎麼快速檢視本地的映象和容器?
答:可以通過 docker images 來快速檢視本地映象;通過 docker ps -a 快速檢視本
地容器。
映象相關: - 如何批量清理臨時映象檔案?
答:可以使用 sudo docker rmi $(sudo docker images -q -f danging=true)命令 - 如何檢視映象支援的環境變數?
答:使用 sudo docker run IMAGE env - 本地的映象檔案都存放在哪裡
答:於 Docker 相關的本地資源存放在/var/lib/docker/目錄下,其中 container 目錄
存放容器資訊,graph 目錄存放映象資訊,aufs 目錄下存放具體的映象底層檔案。 - 構建 Docker 映象應該遵循哪些原則?
答:整體遠側上,儘量保持映象功能的明確和內容的精簡,要點包括: l 儘量選取滿足需求但較小的基礎系統映象,建議選擇 debian:wheezy 映象,僅有
86MB 大小 l 清理編譯生成檔案、安裝包的快取等臨時檔案
l 安裝各個軟體時候要指定準確的版本號,並避免引入不需要的依賴
l 從安全的角度考慮,應用盡量使用系統的庫和依賴
l 使用 Dockerfile 建立映象時候要新增.dockerignore 檔案或使用乾淨的工作目錄
容器相關 - 容器退出後,通過 docker ps 命令檢視不到,資料會丟失麼?
答:容器退出後會處於終止(exited)狀態,此時可以通過 docker ps -a 檢視,其中
資料不會丟失,還可以通過 docker start 來啟動,只有刪除容器才會清除資料。 - 如何停止所有正在執行的容器?
答:使用 docker kill $(sudo docker ps -q) - 如何清理批量後臺停止的容器?
答:使用 docker rm $(sudo docker ps -a -q) - 如何臨時退出一個正在互動的容器的終端,而不終止它?
答:按 Ctrl+p,後按 Ctrl+q,如果按 Ctrl+c 會使容器內的應用程序終止,進而會使
容器終止。 - 很多應用容器都是預設後臺執行的,怎麼檢視它們的輸出和日誌資訊?
答:使用 docker logs,後面跟容器的名稱或者 ID 資訊 - 使用 docker port 命令對映容器的埠時,系統報錯 Error: No public port ‘80’
published for …,是什麼意思?
答:建立映象時 Dockerfile 要指定正確的 EXPOSE 的埠,容器啟動時指定
PublishAllport=true - 可以在一個容器中同時執行多個應用程序嗎?
答:一般不推薦在同一個容器內執行多個應用程序,如果有類似需求,可以通過額外
的程序管理機制,比如 supervisord 來管理所執行的程序 - 如何控制容器佔用系統資源(CPU,記憶體)的份額?
答:在使用 docker create 命令建立容器或使用 docker run 建立並執行容器的時候,
可以使用-c|–cpu-shares[=0]引數來調整同期使用 CPU 的權重,使用-m|–memory
引數來調整容器使用記憶體的大小。
倉庫相關 - 倉庫(Repository)、註冊伺服器(Registry)、註冊索引(Index)有何關係?
答:首先,倉庫是存放一組關聯映象的集合,比如同一個應用的不同版本的映象,注
冊伺服器是存放實際的映象的地方,註冊索引則負責維護使用者的賬號,許可權,搜尋, 標籤等管理。註冊伺服器利用註冊索引來實現認證等管理。 - 從非官方倉庫(如: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 服務
配置相關 - Docker 的配置檔案放在那裡。如何修改配置?
答:Ubuntu 系統下 Docker 的配置檔案是/etc/default/docker,CentOS 系統配置
檔案存放在/etc/sysconfig/docker - 如何更改 Docker 的預設儲存設定?
答:Docker 的預設存放位置是/var/lib/docker,如果希望將 Docker 的本地檔案儲存 到其他分割槽,可以使用 Linux 軟連線的方式來做。
Docker 與虛擬化 - Docker 與 LXC(Linux Container)有何不同?
答:LXC 利用 Linux 上相關技術實現容器,Docker 則在如下的幾個方面進行了改進:
l 移植性:通過抽象容器配置,容器可以實現一個平臺移植到另一個平臺;
l 映象系統:基於 AUFS 的映象系統為容器的分發帶來了很多的便利,同時共同的
映象層只需要儲存一份,實現高效率的儲存; l 版本管理:類似於 GIT 的版本管理理念,使用者可以更方面的建立、管理映象檔案;
l 倉庫系統:倉庫系統大大降低了映象的分發和管理的成本;
l 周邊工具:各種現有的工具(配置管理、雲平臺)對 Docker 的支援,以及基於
Docker 的 Pass、CI 等系統,讓 Docker 的應用更加方便和多樣化。 - Docker 與 Vagrant 有何不同?
答:兩者的定位完全不同
Vagrant 類似於 Boot2Docker(一款執行 Docker 的最小核心),是一套虛擬機器的管
理環境,Vagrant 可以在多種系統上和虛擬機器軟體中執行,可以在 Windows。Mac
等非 Linux 平臺上為 Docker 支援,自身具有較好的包裝性和移植性。
原生 Docker 自身只能執行在 Linux 平臺上,但啟動和執行的效能都比虛擬機器要快,
往往更適合快速開發和部署應用的場景。 - 開發環境中 Docker 與 Vagrant 該如何選擇?
答:Docker 不是虛擬機器,而是程序隔離,對於資源的消耗很少,單一開發環境下
Vagrant 是虛擬機器上的封裝,虛擬機器本身會消耗資源。
Other FAQ - Docker 能在非 Linux 平臺(Windows+MacOS)上執行嗎?
答:可以 - 如何將一臺宿主機的 docker 環境遷移到另外一臺宿主機?
答:停止 Docker 服務,將整個 docker 儲存檔案複製到另外一臺宿主機上,然後調整
另外一臺宿主機的配置即可 - Docker 容器建立後,刪除了/var/run/netns 目錄下的網路名字空間檔案,可以
手動恢復它:
答:檢視容器程序 ID,比如 1234 sudo docker inspect --format='{{. State.pid}}'
$container_id 1234 # 到 proc 目錄下,把對應的網路名字空間檔案連結到
/var/run/netns,然後通過正常的系統命令檢視操作容器的名字空間。
微信
支付寶