Docker核心问题汇总(含原理、操作、网络全解析)

Docker 核心问题汇总(原理 + 操作 + 网络全解析)
(2026 年最新视角 · 面试/实战/运维高频问题 · 通俗 + 图文思路 + 命令对比)

一、Docker 是什么?它和虚拟机到底有什么本质区别?(最常问)

维度传统虚拟机 (VMware/ESXi/KVM)Docker 容器胜出场景(为什么选 Docker)
虚拟化层级硬件虚拟化(Hypervisor)操作系统级虚拟化(内核共享)Docker 启动毫秒级,VM 分钟级
内核每个 VM 有独立 Guest OS 内核所有容器共享宿主机内核资源利用率高,单机跑几十上百容器
资源开销高(每个 VM 都要完整 OS + 内核)极低(只隔离进程、文件系统、网络等)开发/测试/微服务首选
启动速度几十秒 ~ 几分钟毫秒 ~ 几秒CI/CD、弹性伸缩
隔离性强(完全隔离)中等(共享内核,Namespace + cgroup)生产环境敏感服务仍用 VM
安全性较高较低(内核漏洞可逃逸)Docker 需加 seccomp/AppArmor 等加固
镜像大小GB 级MB ~ 几百 MB快速分发、拉取

一句话总结
虚拟机是“在宿主机上虚拟一台电脑”,Docker 是“在宿主机上跑一群隔离的进程”。

二、Docker 三大核心组件是什么?(原理基石)

  1. Image(镜像):只读模板,UnionFS(AUFS/OverlayFS)分层构建
  2. Container(容器):镜像的可运行实例(Namespace + cgroup 隔离)
  3. Repository(仓库):镜像存储与分发中心(Docker Hub / Harbor / 阿里云ACR 等)

镜像分层原理(最重要!)

  • 镜像 = 多层只读层 + 最上层可写容器层(Copy-on-Write)
  • 每条 Dockerfile 指令 → 一层
  • 相同层可复用 → 节省空间、加速拉取

三、Docker 最核心的四大底层技术(面试原理必问)

技术全称 / 作用解决什么问题典型体现
Namespace资源隔离进程、网络、文件系统、用户等相互看不见pid/net/mount/user/uts/ipc/cgroup/… ns
Cgroup资源限制与统计CPU/内存/IO/网络带宽限额docker stats / –cpus / –memory
UnionFS分层文件系统(OverlayFS / AUFS 等)镜像分层、写时复制、节省空间docker history / docker commit
Libnetwork容器网络模型 CNM提供 bridge/host/overlay/macvlan 等驱动docker network ls / create / inspect

四、Docker 常用操作命令速查(高频 Top 20)

类别命令示例说明 / 场景
镜像docker pull nginx:alpine拉取镜像
docker images / docker image ls列出本地镜像
docker rmi <image>删除镜像(强制 -f)
容器docker run -d --name nginx -p 80:80 nginx后台运行 + 端口映射
docker ps -a查看所有容器(-a 包含停止的)
docker stop/start/restart <name>停止/启动/重启
docker exec -it <name> sh/bash进入容器 shell
docker logs -f <name>实时查看日志
docker rm -f <name>强制删除容器
构建docker build -t myapp:1.0 .当前目录 Dockerfile 构建镜像
网络docker network ls查看网络列表
docker network inspect bridge查看 bridge 网络详情
docker volume ls查看数据卷
系统docker infoDocker 整体信息
docker system df查看镜像/容器/卷占用空间
docker system prune -a --volumes清理无用资源(慎用)

五、Docker 网络模式全解析(最复杂、最常考)

网络模式创建方式IP 来源端口映射需要?跨主机通信?典型场景隔离级别
bridge默认(docker0 桥)docker 分配 172.17.x需要单机多容器、开发/测试中等
host--network host直接用宿主机 IP不需要高性能网络(如 Nginx、监控 agent)无网络隔离
none--network none无网络自定义网络插件、纯计算任务无网络
overlaydocker swarm 模式下自动 / 手动创建VXLAN 封装可选Swarm 集群、多主机容器通信跨主机隔离
macvlandocker network create -d macvlan ...宿主机子网段直通不需要是(二层)需要容器像物理机一样有独立 MAC/IP 的场景二层直通
ipvlan类似 macvlan,但不分配 MAC同 macvlan不需要大规模容器、节省 MAC 地址二层直通

快速记忆口诀

  • 单机开发 → bridge(默认)
  • 要最高性能、不在乎端口冲突 → host
  • Swarm 集群 → overlay(首选)
  • 容器要像物理服务器一样被交换机看到 → macvlan / ipvlan
  • 纯计算、无需网络 → none

六、Docker 高频问题 & 答案(面试/故障 Top 10)

  1. docker run 背后到底发生了什么?
    pull 镜像 → 创建容器层(可写) → 创建网络(默认 bridge) → 分配 IP → 启动入口进程(PID 1)
  2. 镜像和容器的区别?
    镜像 = 类(只读模板)
    容器 = 对象(镜像 + 可写层 + 运行时状态)
  3. 数据持久化怎么做?(数据丢失最常见问题)
  • volume(推荐):docker volume create-v /host/path:/container/path
  • bind mount:-v /host/dir:/container/dir
  • tmpfs mount(内存文件系统)
  1. Docker 安全最佳实践?
  • 跑非 root 用户(USER 指令)
  • 最小镜像(alpine / distroless)
  • –read-only + tmpfs
  • seccomp/AppArmor/SELinux
  • 不暴露不必要端口
  1. docker build 缓存怎么失效?
    任何一层指令变了 + 后面所有层都会重新构建
    技巧:把不变的层放前面(依赖安装放前,代码 COPY 放后)
  2. 多阶段构建(multi-stage build)有什么用?
    减小最终镜像体积(编译环境不进最终镜像)
   FROM golang:1.22 AS builder
   WORKDIR /app
   COPY . .
   RUN go build -o main .

   FROM alpine:latest
   COPY --from=builder /app/main /main
   CMD ["/main"]
  1. Swarm vs Kubernetes?(架构选型题)
    Swarm:简单、原生、适合中小团队
    K8s:生态丰富、功能强大、社区活跃、云原生事实标准

七、总结一句话口诀(背下来答题快)

“镜像分层 + Namespace 隔离 + cgroup 限流 + Libnetwork 组网 = 轻量、可移植、秒启的 Docker 容器”

你目前最卡在哪一块?

  • Dockerfile 优化 / 多阶段构建?
  • Swarm / overlay 网络实战?
  • 容器逃逸 / 安全加固?
  • 还是资源限制、日志、监控这些运维细节?

贴出具体问题或场景,我继续帮你深挖~

文章已创建 4237

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部