news 2026/10/24 1:26:24

Docker 面试题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker 面试题

一、基础必考题

1. Docker 是什么?核心解决什么问题?

Docker 是基于Go 语言开发的容器化引擎,基于 Linux 内核的Namespace(隔离)、Cgroups(资源限制)、UnionFS(镜像分层)实现。核心价值:一次构建、处处运行,解决环境不一致、依赖冲突、部署繁琐、迁移困难的问题。

2. Docker 和 虚拟机(VM)的核心区别?

维度Docker 容器虚拟机 VM
底层共享宿主机内核独立 Guest OS
启动速度秒级分钟级
资源占用轻量,几乎无额外开销重,占用大量 CPU / 内存
隔离性进程级隔离(弱)系统级隔离(强)
镜像大小MB 级GB 级

3. Docker 三大核心概念?

  • 镜像(Image):只读模板,分层存储,容器的 “模板”
  • 容器(Container):镜像的运行实例,可读写,轻量独立进程
  • 仓库(Registry):存储 / 分发镜像(Docker Hub、Harbor、Nexus)

4. 镜像和容器的区别?

  • 镜像:只读、分层、静态,用于创建容器
  • 容器:读写、动态、运行态,是镜像的实例,一个镜像可启动 N 个容器

二、核心命令题(口述 / 上机高频)

1. 写出常用 docker run 核心参数

# 后台运行 + 端口映射 + 数据卷 + 命名 + 开机自启 docker run -d \ --name my容器 \ -p 宿主机端口:容器端口 \ -v 宿主机目录:容器目录 \ --restart=always \ 镜像名:标签
  • -d:后台运行
  • -p:端口映射(桥接模式)
  • -v:数据卷挂载(持久化)
  • --name:指定容器名
  • --restart=always:异常退出自动重启

2. 进入运行中的容器?execvsattach区别?

  • 推荐:docker exec -it 容器ID /bin/bash(开启新终端,退出容器不停止)
  • 不推荐:docker attach 容器ID(进入容器原有终端,退出会导致容器停止)

3. 停止 / 删除容器 / 镜像常用命令

# 查看运行容器 docker ps # 查看所有容器(含停止) docker ps -a # 优雅停止(发送SIGTERM,等待退出) docker stop 容器ID # 强制杀死(SIGKILL,立即停止) docker kill 容器ID # 删除停止的容器 docker rm 容器ID # 强制删除运行中容器 docker rm -f 容器ID # 删除镜像 docker rmi 镜像ID

4. 查看容器日志、资源占用

# 实时查看日志 docker logs -f 容器ID # 查看最近100行 docker logs --tail=100 容器ID # 查看容器CPU/内存 docker stats 容器ID

三、Docker 镜像 & 分层原理

1. 镜像为什么分层?UnionFS 作用?

  • 镜像基于UnionFS(联合文件系统),分层存储、只读
  • 好处:
    1. 分层复用,节省存储空间
    2. 构建 / 拉取加速,仅拉取变更层
    3. 易维护、易回滚

2. 镜像瘦身 / 优化的常用方法?

  1. 合并RUN指令,减少镜像层数
  2. 构建后清理缓存(yum clean all、rm -rf /var/cache)
  3. 使用多阶段构建(Multi-stage Build)
  4. 选用精简基础镜像(alpine代替centos/ubuntu)
  5. 不安装无用依赖、删除临时文件

四、Dockerfile 核心考点

1. 常用 Dockerfile 指令

  • FROM:指定基础镜像(必须第一条)
  • RUN:构建镜像时执行命令(创建层)
  • CMD:容器启动默认命令,可被命令行覆盖
  • ENTRYPOINT:容器启动固定命令,不易被覆盖
  • COPY:复制本地文件到镜像(仅复制)
  • ADD:支持复制 + 自动解压压缩包 + 远程文件(慎用)
  • WORKDIR:设置工作目录
  • EXPOSE:声明暴露端口(仅声明,不发布)
  • ENV:设置环境变量
  • VOLUME:声明匿名数据卷

2. CMD 和 ENTRYPOINT 核心区别?

  • CMD:可被docker run后面的命令覆盖
  • ENTRYPOINT:命令不会被覆盖,run后面的参数会作为参数传递
  • 组合用法:ENTRYPOINT固定命令 +CMD传默认参数

3. ADD 和 COPY 区别?

  • COPY:仅本地文件复制,安全简单,推荐
  • ADD:额外支持:自动解压.tar.gz、拉取远程 URL(不推荐,不安全)

4. 什么是多阶段构建?

将构建环境和运行环境分离,第一阶段编译打包,第二阶段仅复制运行包,大幅减小最终镜像体积。


五、容器数据持久化

1. 容器默认数据为什么会丢失?

容器是可读写层,删除容器后,可读写层数据一并删除,数据不持久化。

2. Docker 三种持久化方式?

  1. 数据卷(Volume):Docker 管理宿主机目录,推荐(跨平台、权限友好)
  2. 绑定挂载(Bind Mount):直接挂载宿主机指定目录
  3. tmpfs 挂载:内存挂载,重启丢失(仅临时数据)

3. 数据卷核心命令

bash

运行

# 创建数据卷 docker volume create 卷名 # 挂载数据卷 docker run -v 卷名:容器内目录 镜像 # 查看数据卷 docker volume ls

六、Docker 网络模式

1. Docker 4 种默认网络模式?

  1. bridge(默认):独立网卡,端口映射访问,容器间可通信
  2. host:共享宿主机网络,无隔离,性能最高
  3. none:无网络,完全隔离
  4. container:共享另一个容器的网络栈

2. bridge 模式原理?

  • Docker 创建虚拟网桥docker0,容器分配独立 IP
  • 宿主机通过端口映射(-p)访问容器
  • 同一 bridge 下容器可通过容器名 / IP直接通信

3. 容器间如何通信?

  1. 同 bridge 网络:直接用容器名 / IP 通信
  2. 自定义 bridge:DNS 解析,推荐生产使用
  3. 端口映射 + 宿主机 IP:跨主机 / 外部访问

七、底层原理

1. Docker 隔离 & 限制依赖哪两个核心技术?

  • Namespace:实现资源隔离(PID、网络、挂载、主机名、IPC、用户)
  • Cgroups:实现资源限制(CPU、内存、磁盘 IO、带宽)

2. Namespace 隔离哪些资源?

  • PID:进程 ID 隔离
  • NET:网络栈、网卡、端口隔离
  • MNT:文件系统挂载点隔离
  • UTS:主机名 / 域名隔离
  • IPC:信号量、消息队列隔离
  • USER:用户 / 用户组隔离

3. Cgroups 作用?

限制容器使用的CPU 核心数、内存上限、磁盘 IO、网络带宽,防止单个容器耗尽宿主机资源。

4. Docker 为什么比虚拟机启动快?

  • 容器共享宿主机内核,无需启动完整操作系统
  • 仅启动业务进程,无 Hypervisor、GuestOS 开销

八、实战排查题(场景题)

1. 容器启动失败 / 一直重启,怎么排查?

  1. 看日志:docker logs -f 容器ID
  2. 检查端口冲突:netstat -tulpn
  3. 检查资源限制:内存溢出、CPU 打满
  4. 检查数据卷权限:挂载目录无读写权限
  5. 进入容器调试:docker run --rm -it 镜像 /bin/bash手动启动

2. 容器时区不对(8 小时误差)怎么解决?

  1. 运行时挂载时区:
-v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro
  1. Dockerfile 配置时区:
ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

3. 如何部署 SpringBoot + MySQL 多容器?

  1. 自定义 bridge 网络(保证 DNS 解析)
  2. MySQL 挂载数据卷持久化
  3. SpringBoot 连接地址用容器名(而非localhost)
  4. 使用 Docker Compose 统一编排

九、高频易混对比题

  1. docker stop vs docker kill

    • stop:优雅退出(SIGTERM → 等待 → SIGKILL)
    • kill:强制立即杀死(SIGKILL)
  2. 容器退出码常见含义

    • 0:正常退出
    • 137:OOM 内存溢出(被内核杀死)
    • 125:Docker 命令错误
    • 126:权限不足 / 无法执行
    • 127:命令找不到
  3. docker save vs docker export

    • save:保存镜像,保留分层 / 元数据
    • export:导出容器快照,丢失分层信息

十、面试一句话速记

  1. Docker = Namespace 隔离 + Cgroups 资源限制 + UnionFS 分层
  2. 镜像只读分层,容器读写临时,数据卷持久化
  3. CMD 可覆盖,ENTRYPOINT 不覆盖
  4. bridge 默认网络,host 共享网络
  5. 排查三板斧:logs→stats→exec进容器
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 18:59:16

楼道LED灯的智能调节控制系统设计

楼道LED灯的智能调节控制系统设计 第一章 绪论 传统楼道LED灯多采用常亮或声控/光控单一触发模式,常亮模式造成大量电能浪费,单一触发模式易受环境干扰(如楼道杂音触发、白天误亮),且无法适配不同时段的照明需求。楼道…

作者头像 李华
网站建设 2026/10/14 13:00:44

高防 CDN 的 “流量清洗“ 是什么意思?

高防 CDN 流量清洗的定义流量清洗是高防 CDN(内容分发网络)的核心功能之一,指通过技术手段识别并过滤恶意流量(如 DDoS 攻击、CC 攻击),仅允许正常用户请求到达源服务器。其本质是区分“合法流量”与“攻击…

作者头像 李华
网站建设 2026/10/20 5:18:06

速藏!亚马逊又裁员了!程序员/小白必看:AI才是破局关键

近日,亚马逊官方正式官宣一则重磅消息:将裁减1.6万名企业员工,消息一出,瞬间引发科技圈、职场圈热议,尤其是正在深耕技术领域的程序员和想入行的小白,更该好好看看这背后的信号。 图片来源网络,…

作者头像 李华
网站建设 2026/10/23 9:03:52

欧姆龙PLC CJ2M项目实战:12 个伺服电机与气缸控制大揭秘

欧姆龙, PLC CJ2M标准程序,一共控制12个伺服电机 ,气缸若干,包含轴点动,回零,相对与绝对定位,整个项目的模块都有:主控程序,复位程序,手动,生产计数,只要弄明…

作者头像 李华
网站建设 2026/10/19 20:40:53

「SPIE出版,ISSNISBN双刊号,高录用EI稳定检索 | 规模大层次高,长春光机所指导举办,权威专家齐聚,特设优秀评选」第三届光电信息与光学工程国际学术会议(OIOE 2026)

第三届光电信息与光学工程国际学术会议(OIOE 2026) 2026 3rd International Conference on Optoelectronic Information and Optical Engineering 会议时间:2026年3月6-8日 会议地点:中国长春(长春线下Zoom线上同…

作者头像 李华
网站建设 2026/10/22 17:48:30

智能窗控制系统设计

智能窗控制系统设计 第一章 绪论 传统窗户依赖人工开合,存在操作不便、无法根据环境变化自适应调节的问题,尤其在雨天忘关窗易导致室内进水、大风天开窗易损坏窗体、雾霾天开窗影响室内空气质量,难以满足现代家居对安全、舒适、节能的需求。智…

作者头像 李华