本系列文章根據Ajeet Singh Raina所寫的「Top 100 Docker Interview Questions」文章,翻譯轉載成一百個問題與答案,其中將Docker相關面試問題分成初級、中級和進階級。若你正在準備Docker相關工作的職缺面試,或渴望獲得Docker相關工具及知識,這些內容可能就是你最需要知道的。
Docker藉由讀取名稱為Dockerfile的文字檔來自動建置容器映像檔,它包含建置特定映像檔所需之依順序執行的所有命令,Dockerfile遵循特定格式和指令集,如下所示:
? FROM ubuntu CMD echo "This is a test." | wc
接著,進行操作示範。先來嘗試建立一個Docker映像檔並運行成Docker容器,首先新增名為cmd.Dockerfile檔案,並加入下列內容:
? FROM ubuntu CMD echo "This is a test." | wc
然後,建置Docker Image:
? docker build -t /mycmd -f ./cmd.Dockerfile
現在,啟動容器及其結果:
? $ docker run /mycmd 1 4 16
Q8:Dockerfile與Docker Compose有何不同?
Dockerfile是一個簡單的文字檔,其中包含使用者可以呼叫組裝映像檔的指令,而Docker Compose是用於定義和運行多個容器的Docker生態系相關工具。
Docker Compose是在docker-compose.yml檔案中定義其構成的應用系統服務,藉此讓它們可以在單一隔離環境中一起運行,只需執行「docker-compose up」一行指令,就能運行好一組應用程式。
若將build指令新增到專案底下的docker-compose.yml檔案中,Docker Compose便可使用其Dockerfile,Docker工作流程應該是為每個映像檔建立合適的Dockerfile,然後使用Compose透過build指令來組合那些映像檔。
Q9:可以在Docker Compose文件中使用JSON檔取代YAML檔嗎?
當然,YAML檔是JSON的父集合(Superset),因此任何JSON文件應該都是有效的YAML檔,欲在Compose中使用JSON檔案,需要特別地指定檔案的名稱,例如:
? docker-compose -f docker-compose. json up
可以使用json檔取代yaml當作Compose定義檔,使用json檔來配合Compose,指定其特定檔名來使用,例如:
? $ docker-compose -f docker-compose .json up
Q10:如何建立Docker容器?
可以使用下列命令,利用Docker映像檔來新建Docker容器:
? $ docker run -t -i command
此指令將建立並啟動容器,如果要確認目前主機上所有仍在運行中的容器清單,則使用下面指令:
? $ docker ps -a
Q11:每台主機可執行的最大容器數量是多少?
實際上,取決於本身的系統環境、應用程式的大小,以及可用資源的數量(像是CPU),都會影響到環境中可運行的容器數量。
很遺憾的是,容器並非神奇魔法,它無法憑空創造出新的CPU,但這確實提供了一種更具效率的資源使用方式,容器本身是非常輕量的(千萬記住,作業系統式容器和應用系統式容器的差異),且唯有在它們正確使用並執行,才是如此輕盈(一個容器執行一種服務)。
Q12:如何推送個人的Docker映像檔到Azure Container Registry(ACR)?
在建立ACR時,在左側導覽頁選擇存取金鑰,選擇啟用管理使用者功能,透過在「管理使用者」下方的使用者名稱,與其中一組Password,就可皆由Docker登入來管理映像檔儲存,在將本地端Docker映像檔推送到ACR之前,先使用以下Docker指令來登入:
? $ docker login dockware.azurecr. io -u -p
標註本地端建置的映像檔,前綴名稱必須以ACR儲存庫來命名,才能推送到Azure Container Registry:
? $ docker tag dockware. azurecr.io/starterapp:latest
接著,使用下列指令來推送到ACR:
? $ docker push dockware.azurecr. io/starterapp:latest
確認自已的映像檔是否已存在映像檔儲存註冊庫中,可以使用此指令:
? $ az acr repository list -n
若以圖3為範例,便是下述指令:
|
▲圖3 Azure Container Registry設定。 |
? $ az acr repository list -n dockware [ "chatbot", "chatbot_rest" ]
Q13:如何使用alpine映像檔執行容器,並將xy-products volume以唯讀模式,掛載到容器的/data目錄?
可以使用下列的指令來完成:
? $ docker container run -it --rm -v xy-products:/data:ro alpine /bin/sh
Q14:請描述修改Docker Daemon配置的方式有幾種?
總共有兩種方法可修改Docker Daemon配置:
1. 使用JSON配置檔
這是建議方式,因為這可所有配置存放在單一目錄位置。