Docker 常見手寫面試題分享,給你安排的明明白白!

無敵天驕發表於2021-03-22

一、映象相關

  1. 1. 如何備份系統中所有的映象?
    答首先, 備份映象列表可以使用 docker images | awk 'NR>l{prin七$1":"$2} ' | sort > images.list

匯出所有映象為當前目錄下檔案, 可以使用如下命令:

while read img; do 
echo $img 
file="${img/\//-}" 
sudo docker save --output $file. tar $img 
done< images.list

將本地映象檔案匯入為Docker映象:

while read img; do 
echo $img 
file="${img/\//-}" 
docker load< $file.tar 
done< images.list
  1. 2. 如何批次清理臨時映象檔案?
    答:可以使用 docker rmi $(docker images -q -f dangling = rue)命令。

  2. 3. 如何刪除所有本地的映象?
    答: 可以使用 docker rmi -f $(docker images -q)命令。


  3. 4. 如何清理Docker系統中的無用資料?
    答:可以使用 docker system prune --volumes -f命令, 這個命令會自動清理處於停止狀態的容器、 無用的網路和掛載卷、 臨時映象和建立映象快取。


  4. 5. 構建Docker映象應該遵循哪些原則?
    答:整體原則上, 儘量保待映象功能的明確和內容的精簡, 避免新增額外檔案和操作步驟, 要點包括:

  • 儘量選取滿足需求但較小的基礎系統映象, 例如大部分時候可以選擇 debian:
    wheezydebian:jessie映象, 僅有不足百兆大小;

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

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

  • 從安全形度考慮, 應用要儘量使用系統的庫和依賴;

  • 如果安裝應用時候需要配置一些特殊的環境變數, 在安裝後要還原不需要保持的變數值;

  • 使用  Dockerfile建立映象時候要新增 .dockerignore檔案或使用乾淨的工作目錄;

  • 區分編譯環境容器和執行時環境容器, 使用多階段映象建立。

二、容器相關

  1. 1. 容器退出後, 透過 docker ps命令檢視不到,資料會丟失麼?
    答:容器退出後會處於 終止(exited)狀態, 此時可以透過 docker ps -a檢視。 其中的資料也不會丟失, 還可以透過 docker [container] start命令來啟動它。 只有刪除掉容器才會清除所有資料。
  2. 2. 如何停止所有正在執行的容器?
    答:可以使用 docker [container] stop $(docker ps -q)命令。
  3. 3. 如何獲取某個容器的PIO資訊?
    答:可以使用 docker [container] inspect --format ' {{ . State.Pid }} '< CONTAINER ID or NAME>命令。
  4. 4. 如何臨時退出一個正在互動的容器的終端, 而不終止它?
    答:按 ctrl-p Ctrl-q。 如果按 ctrl-c往往會讓容器內應用程式終止, 進而會終止容器。
  5. 5. 如何控制容器佔用系統資源(CPU、記憶體)的份額?
    答:在使用 docker [container] create命令建立容器或使用 docker [con­tainer] run 建立並啟動容器的時候, 可以使用 -c | - cpu -shares[=O]引數來調整容器使用 CPU 的權重;使用 -ml-memory[=MEMORY]引數來調整容器使用記憶體的大小。

三、倉庫相關

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

四、配置相關

  1. 1. Docker的配置檔案放在哪裡, 如何修改配置?
    答:使用 upstart 的系統(如 Ubuntu 16.04)的配置檔案在 /etc/default/docker, 使用 systemd的系 統(如 Ubuntu 16.04、Centos等)的配置檔案在 /etc/systemd/system/dockerservice.d/docker.conf

Ubuntu下面的配置檔案內容如下, 讀者可以參考配置(如果出現該檔案不存在的情況,重啟或者自己新建一個檔案都可以解決):

# Customize location of Docker binary (especially for development testing) . 
#DOCKERD="/usr/local/bin/dockerd"
# Use DOCKER_OPTS to modify the daemon startup options.
#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
#if you need Docker to use an HTTP proxy, it can also be specified here. 
#export http_proxy="
# This is also a handy place to tweak where Docker's temporary files go. 
#export TMPDIR="/mnt/bigdrive/docker-tmp"

五、Docker與虛擬化

  1. 1. Docker與LXC ( Linux Container)有何不同?
    答:LXC利用Linux上相關技術實現了容器支援; Docker早期版本中使用了LXC技術,後期演化為新的 libcontainer, 在如下的幾個方面進行了改進:
  • 移植性: 透過抽象容器配置, 容器可以實現從一個平臺移植到另一個平臺;

  • 映象系統: 基於AUFS的映象系統為容器的分發帶來了很多的便利, 同時共同的映象層只需要儲存一份,實現高效率的儲存;

  • 版本管理: 類似於Git的版本管理理念, 使用者可以更方便地建立、 管理映象檔案;

  • 倉庫系統: 倉庫系統大大降低了映象的分發和管理的成本;

  • 周邊工具: 各種現有工具(配置管理、 雲平臺)對Docker的支援, 以及基於Docker 的PaaS、CI等系統, 讓Docker的應用更加方便和多樣化。

六、其他方面

  1. 1. Docker能在非Linux平臺(比如 macOSWindows)上執行麼?
    答:可以。 macOS目前需要使用  docker for mac等軟體建立一個輕量級的Linux虛擬機器層。 由於成熟度不高,暫時不推薦在Windows環境中使用Docker。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69964492/viewspace-2764305/,如需轉載,請註明出處,否則將追究法律責任。

相關文章