分享10道Docker容器相關面試題!!!

很酷不給撩*發表於2020-11-18

1.本地的映象檔案都存放在哪裡

於Docker相關的本地資源存放在/var/lib/docker/目錄下,其中container目錄存放容器資訊,graph目錄存放映象資訊,aufs目錄下存放具體的映象底層檔案。

2.構建Docker映象應該遵循哪些原則?

整體遠側上,儘量保持映象功能的明確和內容的精簡,要點包括:

儘量選取滿足需求但較小的基礎系統映象,建議選擇debian:wheezy映象,僅有86MB大小

清理編譯生成檔案、安裝包的快取等臨時檔案

安裝各個軟體時候要指定準確的版本號,並避免引入不需要的依賴

從安全的角度考慮,應用盡量使用系統的庫和依賴

使用Dockerfile建立映象時候要新增.dockerignore檔案或使用乾淨的工作目錄3.很多應用容器都是預設後臺執行的,怎麼檢視它們的輸出和日誌資訊?

3.很多應用容器都是預設後臺執行的,怎麼檢視它們的輸出和日誌資訊?

檢視所有容器的docker-compose logs

4.如何控制容器佔用系統資源(CPU,記憶體)的份額?

可以使用-c|–cpu-shares[=0]引數來調整同期使用CPU的權重,使用-m|–memory引數來調整容器使用記憶體的大小。

5.倉庫(Repository)、註冊伺服器(Registry)、註冊索引(Index)有何關係?

首先,倉庫是存放一組關聯映象的集合,比如同一個應用的不同版本的映象。註冊伺服器是存放實際的映象檔案的地方。註冊索引則負責維護使用者的賬號、許可權、搜尋、標籤等的管理。因此,註冊伺服器利用註冊索引來實現認證等管理。

6.Docker與LXC(Linux Container)有何不同?

LXC為Linux Container的簡寫,LXC容器是一種核心虛擬化技術,可以提供輕量級的虛擬化,以便隔離程式和資源。

Docker的底層就是使用了LXC來實現的,在LXC的基礎之上,Docker提供了一系列更強的功能。

7.Docker與Vagrant有何不同?

Docker 讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 Linux 機器上,便可以實現虛擬化。

Vagrant是一個可建立輕量級、高複用性和便於移植的開發環境的工具。

可以簡單理解為Vagrant拋棄開發環境中所有讓人頭痛的設定,而是用一個單一的配置檔案來替代,並且可以選擇性地保留所需要的特性。

Vagrant適合用來管理虛擬機器,而docker適合用來管理應用環境。

8.原理

Docker採用的是CS架構,docker client 通過Unix套接字或者網路介面訪問 docker daemon,從而完成容器、映象等內容的管理。

9.侷限

1、Docker是基於Linux 64bit的,無法在32bit的linux/Windows/unix環境下使用

2、LXC是基於cgroup等linux kernel功能的,因此container的guest系統只能是linux base的

3、隔離性相比KVM之類的虛擬化方案還是有些欠缺,所有container公用一部分的執行庫

4、網路管理相對簡單,主要是基於namespace隔離

5、cgroup的cpu和cpuset提供的cpu功能相比KVM的等虛擬化方案相比難以度量(所以dotcloud主要是按記憶體收費)

6、docker對disk的管理比較有限

7、container隨著使用者程式的停止而銷燬,container中的log等使用者資料不便收集

10.如何更改Docker的預設儲存設定?

關閉docker服務
systemctl stop docker.service

# 移動資料到新的目錄
mv /var/lib/docker /export/docker

# 修改docker.service檔案,使用-g引數指定儲存位置

vi /usr/lib/systemd/system/docker.service  
ExecStart=/usr/bin/dockerd --graph /new-path/docker 

# reload配置檔案 
systemctl daemon-reload 

# 重啟docker 

相關文章