40 个最热门的 Docker 面试问题(附答案)
Docker 是一个流行的开源软件平台,它简化了应用程序的创建、管理、运行和分发流程。它使用容器将应用程序及其依赖项打包在一起。Docker 占据了市场主导地位。大多数顶级云计算和 IT 公司都已采用 Docker 来简化其应用程序开发工作流程。对具有 Docker 经验的求职者的需求很高。
攻克 Docker 面试关乎获得这些令人垂涎的职位。我们整理了 40 个 Docker 面试常见问题,助您准备 Docker 面试。本 Docker 教程包含面试问答。快来开始吧!
我们将介绍:
Docker 面试问题和答案
1.什么是Docker容器?
Docker 容器在应用层创建抽象,并将应用程序及其所有依赖项打包在一起。这使我们能够快速可靠地部署应用程序。容器不需要我们安装不同的操作系统。相反,它们使用底层系统的 CPU 和内存来执行任务。这意味着任何容器化的应用程序都可以在任何平台上运行,而不受底层操作系统的限制。我们也可以将容器视为 Docker 镜像的运行时实例。
2.什么是DockerFile?
Dockerfile 是一个文本文件,其中包含构建 Docker 镜像所需运行的所有命令。Docker 使用 Dockerfile 中的指令自动构建镜像。我们可以使用它docker build
来创建按顺序执行多个命令行指令的自动构建。
3.如何从Docker镜像创建Docker容器?
要从镜像创建容器,我们需要从 Docker 仓库中提取所需的镜像并创建一个容器。我们可以使用以下命令:
$ docker run -it -d <image_name>
4.Docker Compose 可以使用 JSON 代替 YAML 吗?
是的,我们可以使用 JSON 文件代替 YAML 文件作为 Docker Compose 文件。要使用 JSON,我们需要像这样指定文件名:
$ docker-compose -f docker-compose.json up
5.什么是Docker Swarm?
Docker Swarm 是一个容器编排工具,它允许我们跨不同的主机管理多个容器。使用 Swarm,我们可以将多个 Docker 主机合并为一个主机,以便于监控和管理。
6. 如果您想使用基础图像并对其进行修改,该怎么做?
我们可以使用以下 Docker 命令将镜像从 Docker Hub 拉取到本地系统:
$ docker pull <image_name>
7.如何启动、停止和杀死容器?
要启动 Docker 容器,请使用以下命令:
$ docker start <container_id>
要停止 Docker 容器,请使用以下命令:
$ docker stop <container_id>
要终止 Docker 容器,请使用以下命令:
$ docker kill <container_id>
8.Docker 在哪些平台上运行?
Docker 在以下 Linux 发行版上运行:
- CentOS 6+
- Gentoo
- ArchLinux
- CRUX 3.0+
- openSUSE 12.3+
- RHEL 6.5+
- Fedora 19/20+
- Ubuntu 12.04、13.04
Docker 还可以与以下云服务一起用于生产:
- 微软 Azure
- Google 计算引擎
- 亚马逊 AWS EC2
- 亚马逊 AWS ECS
- Rackspace
提示:我们始终建议您在面试前对公司进行一些调查。为了准备这个问题,请了解公司如何使用 Docker,并在回答中注明他们使用的平台。
9.解释Docker组件。
三个架构组件包括 Docker Client、Host 和 Registry。
-
Docker 客户端:此组件执行构建和运行操作以与 Docker 主机进行通信。
-
Docker 主机:此组件包含 Docker 守护进程、Docker 镜像和 Docker 容器。守护进程会建立与 Docker 注册表的连接。
-
Docker Registry:此组件存储 Docker 镜像。它可以是公共镜像仓库,例如 Docker Hub 或 Docker Cloud,也可以是私有镜像仓库。
10.虚拟化和容器化有什么区别?
虚拟化
虚拟化帮助我们在一台物理服务器上运行和托管多个操作系统。在虚拟化中,虚拟机管理程序会为客户操作系统分配一个虚拟机。这些虚拟机构成了硬件层的抽象,因此主机上的每个虚拟机都可以充当物理机。
集装箱化
容器化为我们提供了一个隔离的应用程序运行环境。我们可以在单个服务器或虚拟机上使用同一操作系统部署多个应用程序。容器构成了应用层的抽象,因此每个容器代表一个不同的应用程序。
11.虚拟机管理程序的功能是什么?
虚拟机管理程序 (Hypervisor) 是一种帮助我们创建和运行虚拟机的软件。它使我们能够使用一台主机支持多台来宾虚拟机。它通过划分主机的系统资源并将其分配给已安装的来宾环境来实现这一点。单个主机操作系统上可以安装多个操作系统。虚拟机管理程序有两种类型:
-
原生:原生虚拟机管理程序(或称裸机虚拟机管理程序)直接在底层主机系统上运行。它使我们能够直接访问主机系统的硬件,并且不需要基础服务器操作系统。
-
托管:托管虚拟机管理程序使用底层主机操作系统。
12.如何构建Dockerfile?
为了创建符合我们概述的规范的镜像,我们需要构建一个 Dockerfile。要构建 Dockerfile,我们可以使用以下docker build
命令:
$ docker build <path to dockerfile>
13. 使用什么命令将新镜像推送到 Docker Registry?
要将新镜像推送到 Docker Registry,我们可以使用以下docker push
命令:
$ docker push myorg/img
14.什么是Docker Engine?
Docker Engine 是一种开源容器化技术,我们可以使用它来构建和容器化我们的应用程序。Docker Engine 由以下组件支持:
- Docker 引擎 REST API
- Docker 命令行界面 (CLI)
- Docker 守护进程
15.如何访问正在运行的容器?
要访问正在运行的容器,我们可以使用以下命令:
$ docker exec -it <container_id> bash
16.如何列出所有正在运行的容器?
要列出所有正在运行的容器,我们可以使用以下命令:
$ docker ps
17.描述Docker容器的生命周期。
Docker容器经历以下阶段:
- 创建容器
- 运行容器
- 暂停容器(可选)
- 取消暂停容器(可选)
- 启动容器
- 停止容器
- 重启容器
- 终止容器
- 销毁容器
18.什么是 Docker 对象标签?
Docker 对象标签是以字符串形式存储的键值对。它们使我们能够向 Docker 对象(例如容器、网络、本地守护进程、镜像、Swarm 节点和服务)添加元数据。
19. 使用 Docker Compose 时,如何确保容器 1 在容器 2 之前运行?
Docker Compose 不会等待容器准备就绪就继续执行下一个容器。为了控制执行顺序,我们可以使用“取决于”条件depends_on
。以下是在 docker-compose.yml 文件中使用它的示例:
version: "2.4"
services:
backend:
build: .
depends_on:
- db
db:
image: postgres
该docker-compose up
命令将按照我们指定的依赖顺序启动并运行服务。
20.该docker create
命令的作用是什么?
该docker create
命令在指定的图像上创建可写的容器层,并准备该图像以运行指定的命令。
另 20 个面试问题值得探索
- 21.解释Docker架构。
- 22.CMD 和 ENTRYPOINT 有什么区别?
- 23. Docker 运行命令中的卷参数有什么用途?
- 24. 在 Docker 上运行有状态应用程序是一种好的做法吗?
- 25.什么是 Docker 命名空间?
- 26.讲解Docker中持续集成、持续部署的实现方法。
- 27. 停止和重启 Docker 容器的过程是什么?
- 28. 如何给你的 Docker 镜像起一个镜像名称?
- 29.该
docker service
命令的作用是什么? - 30.容器退出时会丢失数据吗?
- 31.Jenkins 和 Docker 如何协同工作?
- 32.Docker 容器的扩展范围有多大?
- 33.描述守护进程日志和容器日志之间的区别。
- 34. 解释 Docker compose 的 up、run 和 start 命令的用途。
- 35.Docker 卷存储在哪里?
- 36.解释一下Docker镜像和层的区别。
- 37. 可以从 Docker 中删除暂停的容器吗?
- 38. 如何使用
docker save
和docker load
命令? - 39. Docker 默认的网络驱动是什么?运行 Docker 镜像时如何更改它?
- 40.该
docker system prune
命令的作用是什么?
后续步骤Next steps
恭喜!你成功了!准备 Docker 面试需要时间,所以请耐心等待。准备好投入大量时间学习和准备吧。关于 Docker,还有更多内容需要学习。接下来推荐涵盖以下主题:
- 具有通用开发配置文件的 Docker
- Docker 安全
- 私人注册中心
要开始学习这些概念以及更多内容,请查看 Educative 的DevOps 开发者学习路径。在这个精心策划的学习路径中,您将获得 Docker 和 Kubernetes 的实践经验。最终,您将掌握前沿的静态知识和实践经验,从而能够在 DevOps 岗位上脱颖而出。
学习愉快!