Docker面试题2025 年 4 月 7 日 | 阅读 17 分钟 以下是一些最常见的 Docker 问题及其答案,这些问题对求职面试准备非常有帮助。面试官经常会问这些问题,以了解您对 Docker 的熟悉程度。 1. 什么是 Docker?Docker 是一个开源平台,旨在容器化环境中自动部署、扩展和管理应用程序。它允许您将软件或应用程序与基础设施分离,从而立即交付软件。Docker 使您能够管理基础设施以及应用程序。通过使用 Docker,您可以轻松减少编写代码和在生产环境中执行代码之间的延迟。 2. 什么是容器化?容器化允许开发人员将应用程序及其依赖项(库、二进制文件和配置文件)打包成一个可移植单元,该单元能够在所有环境中以一致的方式运行。简而言之,Docker 使应用程序的部署过程变得更容易,提高了操作效率,并提供了统一的开发、测试和生产环境。 3. 什么是 Docker 容器?Docker 容器是轻量级、可移植且高效的容器,它们将应用程序及其运行所需的一切(代码、运行时、库和系统工具)打包在一起。它们共享宿主系统内核,但在隔离的用户空间中运行,因此应用程序无论底层物理参数如何,都能不受干扰地运行。它们比虚拟机更快、更高效,因为它们共享操作系统,而不是每个实例都需要一个功能齐全的独立操作系统。 4. Docker 镜像和 Docker 容器有什么区别?Docker 镜像和 Docker 容器本质上是同一枚硬币的两面,就持久状态及其在生产环境中的应用而言:镜像是由代码决定的状态;容器是执行时根据代码定义的这些状态的实例。镜像往往是自计算的,也就是说,任何人都可以解释和使用镜像。 容器处于另一个计算领域,其中事物仍然可以被修改。如果您以某种方式更改了一个容器,而您不知道如何重新创建该容器,那么该容器就会变成一个搁浅资产。不同类型的制造商根据它们在容器上操作的镜像或模板来吸引它们。容器一旦停止运行,就会失去相关性;它们被创建是有原因的。 Docker 镜像是静态模板,而容器是这些模板的实时运行实例。 5. 解释 Dockerfile 及其用途。Dockerfile 是一个文本文件,其中包含一系列在构建 Docker 镜像过程中调用的指令。它通过确保一致、可重现的镜像创建过程来自动化创建镜像的程序。使用 Dockerfile,开发人员可以指定环境、依赖项以及要编译到镜像中的应用程序代码。 Dockerfile 的用途如下:
Dockerfile 示例 6. 什么是 Docker Hub?了解 Docker Hub 从 Docker 用户的角度来看,这是一个专门用于存储、共享和管理 Docker 镜像的云服务。可以说它是查找或分发容器镜像的一站式商店。 主要特点
7. Docker Daemon 的作用是什么?代表 Docker 容器、镜像、网络和卷在宿主机上运行的后台服务称为 Docker Daemon。它监听 Docker API 发送的请求,并执行几个由最终用户管理的活动:构建、运行、停止、删除容器等。 Dockerd 的主要功能
8. 如何在 [操作系统] 上安装 Docker?要在 Linux Ubuntu 等操作系统上安装 Docker,我将在 Linux 命令行中运行以下命令 在 Windows/Mac 上:从 https://www.docker.com/products/docker-desktop 下载并安装 Docker Desktop。 9. 解释 Docker 容器的生命周期。下面给出了容器的完整生命周期
10. 使用哪种方法创建 Docker 容器?可以使用 docker run 命令创建 Docker 容器。 例如, 说明 此命令创建并运行一个容器 -d:在后台运行容器(分离模式)--name:为容器分配一个名称--:运行此容器将使用基于 nginx 的镜像。 11. 如何列出正在运行的 Docker 容器?要查看正在运行的容器,我将使用以下任何命令 其他选项有 docker ps -a - 它显示所有容器的列表,无论它们是正在运行还是已停止。 docker ps -q - 它仅输出容器 ID。 docker ps --filter "status=exited" - 它仅显示处于停止状态的容器。 12. 什么是 Docker 卷?Docker 卷是用于持久化由 Docker 容器生成和使用的数据的存储单元。它们由 Docker 管理,并存储在宿主机文件系统(Linux 上的 /var/lib/docker/volumes/)中由 Docker 管理的部分。卷旨在即使在容器停止或删除后也能持久存在,使其成为数据存储、容器之间共享数据和维护应用程序状态的理想选择。 Docker 卷的主要功能
创建和使用卷的示例 13. 什么是 Docker Compose,它的组件和优点是什么?基本上,Docker Compose 允许我们定义和管理多容器 Docker 应用程序。应用程序服务、网络和卷在 YAML 文件 (docker-compose.yml) 中配置。因此,使用 Docker Compose,可以轻松运行由相互连接的容器组成的复杂应用程序。 Docker Compose 的组件
优点
示例: docker-compose.yml 文件 14. 如何在 Docker Compose 中扩展容器?在 Compose 中扩展 Docker 容器,本质上意味着创建服务的多个副本。这是因为在这种情况下,服务可以轻松进行负载平衡并有效处理大量流量。 要扩展服务,请使用以下命令 示例 它指示编排创建 docker-compose.yml 中定义的 Web 服务的三个实例。借助 Docker Compose,这会自动处理所有此类实例之间的网络通信。 15. CMD 和 ENTRYPOINT 之间有什么区别?在 Dockerfile 中,它们实现两个不同的目的,但在容器启动时与容器交互时可以互换使用。 CMD: 它为可执行文件提供默认参数,在执行过程中可以通过提供额外的参数来覆盖。 ENTRYPOINT: 它指的是每次进入容器时将执行的主命令。运行时发送的任何参数都将附加到 ENTRYPOINT 的参数中。 示例 Dockerfile 这里唯一的区别是 ENTRYPOINT 运行 Python 脚本,而 CMD 设置默认值(端口号),尽管这些值可以在运行时选择性地更改。 16. 如何在 Docker 容器之间复制文件?docker cp 命令足以在 Docker 容器和宿主系统之间复制文件。 将文件从宿主机复制到容器 将文件从容器复制到宿主机 17. docker stop 和 docker kill 有什么区别?docker stop 和 docker kill 之间的区别如下:
18. 如何将更改提交到 Docker 容器?从命令行,您可以将更改提交到正在运行的 Docker 容器,以使用以下命令创建新镜像:docker commit container_id new_image_name。它捕获容器的当前状态并将其保存为新镜像。 19. 解释 Docker 网络。这是 Docker 网络,容器可以使用它直接相互通信、与宿主操作系统通信或与外部世界通信。所有通信通道都保持隔离、安全和可扩展。 有几点需要注意
20. Docker 网络的类型有哪些?
21. 如何检查 Docker 镜像?您可以使用以下命令检查 Docker 镜像 此命令将显示镜像的元数据、层信息和配置数据。 22. Docker Swarm 和 Kubernetes 有什么区别?Docker Swarm 和 Kubernetes 都是容器编排工具,但它们在架构、可扩展性和功能集方面有所不同。以下是区别:
何时使用哪个?
23. 解释 Docker 中的多阶段构建。这意味着多阶段构建是在 Dockerfile 中使用多个 FROM 语句来缩小镜像的大小。每个 FROM 都是一个不同的构建阶段。 多阶段构建:如何以及为何使用它。
示例 # 阶段 1:构建 # 阶段 2:生产 第一阶段(builder)编译 Go 应用程序。第二阶段(alpine)只包含最终的二进制文件,使镜像更小更安全。 24. 什么是 Docker Secret?如何使用它?Docker Secrets 已被证明是一个熟练的工具,可帮助开发人员在 Docker Swarm 环境中安全地存储、管理和部署敏感数据,例如密码、API 密钥和 TLS 证书。因此,Secrets 在静态和传输过程中都经过加密。 通过在终端中运行命令来使用 Docker Secrets 的步骤 1. 创建一个 Secret 2. 使用 Secret 部署服务 3. 在容器内部访问 Secret Secrets 以文件形式挂载到容器内的 /run/secrets/ 中。 优点
25. 如何保护 Docker 容器?我将使用以下方法来保护 Docker 容器
26. Docker 如何处理数据持久性?Docker 提供了几种处理数据持久性的方法。 卷 - 由 Docker 管理,容器删除后仍然持久。
27. 什么是 Docker 命名空间?Docker 实现命名空间进程隔离。
USER 用户的独特标识 示例 (使用宿主机的 PID 命名空间) 28. 解释 Docker cgroups。控制组(cgroups)限制并监控应用程序的使用:CPU、内存、I/O,命令如下
29. 如何管理 Docker 日志?有一些可能的方法可以帮助我管理 Docker 日志,如下所示:
30. 什么是 Docker 中的 BuildKit?BuildKit 比 Build 作为一个构建器做得更好,因为它速度快、缓存好、并行执行。要使用 BuildKit,请执行命令行指令 DOCKER_BUILDKIT=1 docker build .。优点包括:构建速度快、并行运行、更好的缓存。 31. 什么是 Docker 插件?Docker 服务插件的扩展包括但不限于
32. 如何从 Dockerfile 构建 Docker 镜像?Dockerfile 是创建 Docker 镜像的指令;要使用 Dockerfile 创建镜像:docker build -t my-image-name。 创建镜像的命令 . (点) 指的是当前目录,它应该包含 Dockerfile。 Dockerfile 示例 Dockerfile 完成以下操作:
33. 如何标记 Docker 镜像?此过程标记镜像以启用版本控制。 示例 这会重命名镜像,以便将其推送到 Docker Hub 等仓库。 要查看所有标记的镜像,请使用命令 34. 如何将镜像推送到 Docker Hub?在 Docker Hub 上共享镜像的步骤 步骤 1:打开 Docker Hub。 步骤 2:docker login 步骤 3:为 Docker Hub 标记镜像 步骤 4:将镜像推送到 Docker Hub 步骤 5:因此,其他人可以通过以下方式拉取它 docker pull mydockerhubusername/my-image:v1.0 35. 如何删除 Docker 镜像和容器?我将使用以下命令删除 Docker 镜像和容器 删除所有已停止的容器 删除镜像 删除所有未标记的镜像 查看活动容器 36. docker exec 命令的用途是什么?使用 docker exec 命令,您可以在已经运行的容器中运行命令。 示例
37. 如何在 Docker 中配置资源限制?Docker 允许您使用资源限制来限制容器的 CPU 和内存使用。您可以使用以下命令在运行容器时设置限制:
列出容器的资源利用率 38. Dockerfile 中的 COPY 和 ADD 有什么区别?
示例
39. 如何与其他团队共享 Docker 镜像?共享 Docker 镜像可以通过多种方式完成 1. 通过 Docker Hub 推送 2. 推送到私有注册表 3. 将镜像保存和加载为 Tar 文件 4. 加载到另一台机器 - 此方法在没有互联网时非常有用。 40. 如何排除失败的 Docker 容器故障?要排除失败的 Docker 容器故障,我将执行以下步骤 1. 检查容器日志 2. 检查容器 它将显示环境变量、卷挂载和其他网络设置。 3. 检查进程 4. 访问容器 shell 5. 重启容器 6. 用于调试 容器现在以交互方式运行以进行调试。 41. 解释 Docker 的 Overlay Network。Docker 的 Overlay Network 允许容器相互通信,即使它们设置在不同的主机上。Overlay Network 功能包括
创建覆盖网络 在 Overlay Network 上运行服务 检查网络 用例 Swarm 中有许多节点,因此允许不同机器上的容器像在同一本地网络上一样进行通信。 42. 如何优化 Docker 镜像构建过程?为了优化 Docker 镜像构建过程,我将遵循以下步骤:
43. 如何处理容器化应用程序崩溃?以下几点将有助于处理容器化应用程序崩溃:
44. 将传统应用程序迁移到 Docker 需要采取哪些步骤?我将遵循以下步骤将传统应用程序迁移到 Docker:
45. 如何使用 Docker 实现 CI/CD?以下是我将使用 Docker 实现 CI/CD 的步骤:
46. 如何在 Docker 中安全地处理环境变量?必须通过 Docker secrets (docker secret create) 在 Swarm 中保守秘密。 .env 文件可以保留环境变量(但不能推送到 Git)。使用 Vault 或 AWS Secrets Manager 等秘密管理工具。环境变量也可以通过 docker run --env-file 安全地传递。不要将敏感信息硬编码到 Dockerfile 中。 47. 如何使用 Docker 部署微服务架构?我将通过以下步骤使用 Docker 部署微服务架构。
48. 如何减小 Docker 镜像大小?通过以下步骤,我将减小 Docker 镜像大小:
49. 如果 Docker 容器启动失败,您会怎么做?如果 Docker 容器启动失败,我将考虑以下几点:
50. 如何监控 Docker 容器性能?如果需要监控 Docker 容器的性能,我将使用以下方法:
|
我们请求您订阅我们的新闻通讯以获取最新更新。