Docker 是一種流行的開源軟件平臺,可簡化創(chuàng)建、管理、運(yùn)行和分發(fā)應(yīng)用程序的過程。它使用容器來打包應(yīng)用程序及其依賴項。Docker 主導(dǎo)了市場。大多數(shù)頂級云和 IT 公司都采用 Docker 來簡化其應(yīng)用程序開發(fā)工作流程。對具有 Docker 經(jīng)驗的申請人的需求很高。
破解 Docker 面試是獲得這些令人垂涎的角色之一的關(guān)鍵。我們收集了 40 大 Docker 面試問題,以幫助您準(zhǔn)備 Docker 面試。這個 Docker 教程包括問題和答案。讓我們開始吧!
Docker 面試問答
1. 什么是 Docker 容器?
Docker 容器在應(yīng)用程序?qū)觿?chuàng)建抽象并將應(yīng)用程序及其所有依賴項打包在一起。這使我們能夠快速可靠地部署應(yīng)用程序。容器不需要我們安裝不同的操作系統(tǒng)。相反,它們使用底層系統(tǒng)的 CPU 和內(nèi)存來執(zhí)行任務(wù)。這意味著任何容器化應(yīng)用程序都可以在任何平臺上運(yùn)行,而不管底層操作系統(tǒng)如何。我們也可以將容器視為 Docker 鏡像的運(yùn)行時實例。
2. 什么是 DockerFile?
Dockerfile 是一個文本文件,其中包含我們需要運(yùn)行以構(gòu)建 Docker 映像的所有命令。Docker 使用 Dockerfile 中的指令自動構(gòu)建鏡像。我們可以docker build用來創(chuàng)建按順序執(zhí)行多個命令行指令的自動構(gòu)建。
3. 如何從 Docker 鏡像創(chuàng)建 Docker 容器?
為了從鏡像創(chuàng)建容器,我們從 Docker 存儲庫中提取我們想要的鏡像并創(chuàng)建一個容器。我們可以使用以下命令:
1
$ docker run -it -d <image_name>
4. Docker Compose 可以使用 JSON 代替 YAML 嗎?
是的,我們可以對Docker Compose文件使用 JSON 文件而不是YAML
$ docker-compose -f docker-compose.json up
5. 什么是Docker Swarm?
Docker Swarm 是一個容器編排工具,它允許我們跨不同主機(jī)管理多個容器。使用 Swarm,我們可以將多個 Docker 主機(jī)變成單個主機(jī),以便于監(jiān)控和管理。
6. 如果你想使用一個基礎(chǔ)鏡像并對其進(jìn)行修改,你怎么做?
我們可以使用以下 Docker 命令將圖像從 Docker Hub 拉到我們的本地系統(tǒng)上:
$ docker pull <image_name>
7. 如何啟動、停止和終止容器?
要啟動 Docker 容器,請使用以下命令:
$ docker start <container_id>
要停止 Docker 容器,請使用以下命令:
$ docker stop <container_id>
要終止 Docker 容器,請使用以下命令:
$ docker kill <container_id>
8. Docker 運(yùn)行在哪些平臺上?
Docker 在以下 Linux 發(fā)行版上運(yùn)行:
CentOS 6+
Gentoo
ArchLinux
CRUX 3.0+
openSUSE 12.3+
RHEL 6.5+
Fedora 19/20+
Ubuntu 12.04、13.04
Docker 還可以通過以下云服務(wù)在生產(chǎn)中使用:
- 微軟Azure
- 谷歌計算引擎
- 亞馬遜 AWS EC2
- 亞馬遜 AWS ECS
- 機(jī)架空間
提示:我們始終建議您在面試之前進(jìn)行一些公司研究。要為這個特定問題做準(zhǔn)備,請了解公司如何使用 Docker 并在您的答案中包含他們使用的平臺。
9. 解釋 Docker 組件。
三個架構(gòu)組件包括 Docker 客戶端、主機(jī)和注冊表。
Docker 客戶端:該組件執(zhí)行構(gòu)建和運(yùn)行操作以與 Docker 主機(jī)通信。
Docker 主機(jī):該組件包含 Docker 守護(hù)程序、Docker 鏡像和 Docker 容器。守護(hù)進(jìn)程建立到 Docker Registry 的連接。
Docker Registry:該組件存儲 Docker 鏡像。它可以是公共注冊表,例如 Docker Hub 或 Docker Cloud,也可以是私有注冊表。
10. 虛擬化和容器化有什么區(qū)別?
虛擬化
虛擬化幫助我們在單個物理服務(wù)器上運(yùn)行和托管多個操作系統(tǒng)。在虛擬化中,管理程序為客戶操作系統(tǒng)提供了一個虛擬機(jī)。VM 形成了硬件層的抽象,因此主機(jī)上的每個 VM 都可以充當(dāng)物理機(jī)。
容器化
容器化為我們提供了一個獨(dú)立的環(huán)境來運(yùn)行我們的應(yīng)用程序。我們可以在單個服務(wù)器或 VM 上使用相同的操作系統(tǒng)部署多個應(yīng)用程序。容器構(gòu)成了應(yīng)用層的抽象,所以每個容器代表一個不同的應(yīng)用。
11. 管理程序的功能是什么?
管理程序或虛擬機(jī)監(jiān)視器是幫助我們創(chuàng)建和運(yùn)行虛擬機(jī)的軟件。它使我們能夠使用單個主機(jī)來支持多個來賓虛擬機(jī)。它通過劃分主機(jī)的系統(tǒng)資源并將它們分配給已安裝的來賓環(huán)境來實現(xiàn)這一點。可以在單個主機(jī)操作系統(tǒng)上安裝多個操作系統(tǒng)。有兩種類型的管理程序:
Native:本機(jī)管理程序或裸機(jī)管理程序,直接在底層主機(jī)系統(tǒng)上運(yùn)行。它使我們可以直接訪問主機(jī)系統(tǒng)的硬件,并且不需要基本服務(wù)器操作系統(tǒng)。
托管:托管管理程序使用底層主機(jī)操作系統(tǒng)。
12.如何構(gòu)建Dockerfile?
為了使用我們概述的規(guī)范創(chuàng)建映像,我們需要構(gòu)建一個 Dockerfile。要構(gòu)建 Dockerfile,我們可以使用以下docker build命令:
$ docker build <path to dockerfile>
13. 使用什么命令將新鏡像推送到 Docker Registry?
要將新鏡像推送到 Docker Registry,我們可以使用以下docker push命令:
$ docker push myorg/img
14.什么是Docker引擎?
Docker Engine 是一種開源容器化技術(shù),我們可以使用它來構(gòu)建和容器化我們的應(yīng)用程序。Docker Engine 由以下組件支持:
- Docker 引擎 REST API
- Docker 命令行界面 (CLI)
- Docker 守護(hù)進(jìn)程
15. 如何訪問正在運(yùn)行的容器?
要訪問正在運(yùn)行的容器,我們可以使用以下命令:
$ docker exec -it <container_id> bash
16.如何列出所有正在運(yùn)行的容器?
要列出所有正在運(yùn)行的容器,我們可以使用以下命令:
$ docker ps
17. 描述 Docker 容器的生命周期。
Docker 容器經(jīng)歷以下階段:
- 創(chuàng)建容器
- 運(yùn)行容器
- 暫停容器(可選)
- 取消暫停容器(可選)
- 啟動容器
- 停止容器
- 重啟容器
- 殺死容器
- 銷毀容器
18. 什么是Docker對象標(biāo)簽?
Docker 對象標(biāo)簽是存儲為字符串的鍵值對。它們使我們能夠?qū)⒃獢?shù)據(jù)添加到 Docker 對象,例如容器、網(wǎng)絡(luò)、本地守護(hù)進(jìn)程、圖像、Swarm 節(jié)點和服務(wù)。
19. 使用Docker Compose時如何保證容器1先于容器2運(yùn)行?
Docker Compose 在繼續(xù)下一個容器之前不會等待容器準(zhǔn)備就緒。為了控制我們的執(zhí)行順序,我們可以使用“取決于”條件,depends_on。這是在 docker-compose.yml 文件中使用的示例:
version: "2.4"
services:
backend:
build: .
depends_on:
- db
db:
image: postgres
該docker-compose up命令將按照我們指定的依賴順序啟動和運(yùn)行服務(wù)。
20.docker create命令有什么作用?
該docker create命令在指定映像上創(chuàng)建可寫容器層,并準(zhǔn)備該映像以運(yùn)行指定命令。