docker面試你要知道

AlbenXie發表於2018-08-05

1、如何批量刪除或者停止執行的容器?

docker kill/rm `docker ps -aq`

2、如何檢視映象支援的環境變數?

使用sudo docker run IMAGE env

3、本地的映象檔案都存放在哪裡

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

4、構建Docker映象應該遵循哪些原則?

整體遠側上,儘量保持映象功能的明確和內容的精簡,要點包括: 
# 儘量選取滿足需求但較小的基礎系統映象,建議選擇debian:wheezy映象,僅有86MB大小 
# 清理編譯生成檔案、安裝包的快取等臨時檔案 
# 安裝各個軟體時候要指定準確的版本號,並避免引入不需要的依賴 
# 從安全的角度考慮,應用盡量使用系統的庫和依賴 
# 使用Dockerfile建立映象時候要新增.dockerignore檔案或使用乾淨的工作目錄

5、容器退出後,通過docker ps 命令檢視不到,資料會丟失麼?

容器退出後會處於終止(exited)狀態,此時可以通過 docker ps -a 檢視,其中資料不會丟失,還可以通過docker start 來啟動,只有刪除容器才會清除資料。
在這裡還要注意開啟容器的時候是否新增了--rm引數

6、如何臨時退出一個正在互動的容器的終端,而不終止它?

按Ctrl+p,後按Ctrl+q,如果按Ctrl+c會使容器內的應用程式終止,進而會使容器終止。

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

使用docker logs,後面跟容器的名稱或者ID資訊

8、使用docker port 命令對映容器的埠時,系統報錯Error: No public port ‘80’ published for …,是什麼意思?

建立映象時Dockerfile要指定正確的EXPOSE的埠,容器啟動時指定PublishAllport=true

9、可以在一個容器中同時執行多個應用程式嗎?

一般不推薦在同一個容器內執行多個應用程式,如果有類似需求,可以通過額外的程式管理機制,比如supervisord來管理所執行的程式

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

在使用docker create命令建立容器或使用docker run 建立並執行容器的時候,可以使用-c|–cpu-shares[=0]引數來調整同期使用CPU的權重,使用-m|–memory引數來調整容器使用記憶體的大小。

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

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

12 、從非官方倉庫(如: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服務

13、Docker的配置檔案放在那裡。如何修改配置?

Ubuntu系統下Docker的配置檔案是/etc/default/docker,CentOS系統配置檔案存放在/etc/sysconfig/docker

14、如何更改Docker的預設儲存設定?

Docker的預設存放位置是/var/lib/docker,如果希望將Docker的本地檔案儲存到其他分割槽,可以使用Linux軟連線的方式來做。

Docker與虛擬化

15、Docker與LXC(Linux Container)有何不同?

LXC利用Linux上相關技術實現容器,Docker則在如下的幾個方面進行了改進:

移植性:通過抽象容器配置,容器可以實現一個平臺移植到另一個平臺; 
映象系統:基於AUFS的映象系統為容器的分發帶來了很多的便利,同時共同的映象層只需要儲存一份,實現高效率的儲存; 
版本管理:類似於GIT的版本管理理念,使用者可以更方面的建立、管理映象檔案; 
倉庫系統:倉庫系統大大降低了映象的分發和管理的成本; 
周邊工具:各種現有的工具(配置管理、雲平臺)對Docker的支援,以及基於Docker的Pass、CI等系統,讓Docker的應用更加方便和多樣化。

16 、Docker與Vagrant有何不同?

兩者的定位完全不同 
Vagrant類似於Boot2Docker(一款執行Docker的最小核心),是一套虛擬機器的管理環境,Vagrant可以在多種系統上和虛擬機器軟體中執行,可以在Windows。Mac等非Linux平臺上為Docker支援,自身具有較好的包裝性和移植性。 
原生Docker自身只能執行在Linux平臺上,但啟動和執行的效能都比虛擬機器要快,往往更適合快速開發和部署應用的場景。

17、開發環境中Docker與Vagrant該如何選擇?

Docker不是虛擬機器,而是程式隔離,對於資源的消耗很少,單一開發環境下Vagrant是虛擬機器上的封裝,虛擬機器本身會消耗資源。

18 、如何將一臺宿主機的docker環境遷移到另外一臺宿主機?

停止Docker服務,將整個docker儲存檔案複製到另外一臺宿主機上,然後調整另外一臺宿主機的配置即可

19、Docker容器建立後,刪除了/var/run/netns 目錄下的網路名字空間檔案,可以手動恢復它:

# 檢視容器程式ID,比如1234
sudo docker inspect --format='{{. State.pid}}' $container_id 
1234
# 到proc目錄下,把對應的網路名字空間檔案連結到/var/run/netns,然後通過正常的系統命令檢視操作容器的名字空間。

相關文章