一、基础部分(基本使用)

1. Docker核心概念

  • 镜像(Image)、容器(Container)、仓库(Repository)的概念
  • Docker与虚拟机的区别(轻量级、资源共享、启动速度等)

2. Docker安装与配置

  • 在不同操作系统(Linux, Windows, macOS)上的安装
  • 配置镜像加速器(阿里云等)

3. 基本命令操作

  • 镜像管理:
    • docker pulldocker imagesdocker rmidocker build(Dockerfile)
    • docker tagdocker pushdocker savedocker load
  • 容器管理:
    • docker run(各种参数:-d, -p, -v, --name, --network, --restart等)
    • docker psdocker stopdocker startdocker restartdocker rm
    • docker logsdocker execdocker inspect
  • 其他常用命令:
    • docker infodocker versiondocker system df(查看磁盘使用)

4. Dockerfile编写

  • 常用指令:FROM, RUN, CMD, ENTRYPOINT, COPY, ADD, ENV, ARG, WORKDIR, USER, EXPOSE, VOLUME
  • 多阶段构建(Multi-stage builds)
  • 最佳实践(减少镜像层数、使用.dockerignore等)

5. Docker Compose

  • 编写docker-compose.yml文件(version, services, networks, volumes
  • 常用命令:docker-compose up, down, ps, logs, exec, build
  • 环境变量文件(.env)的使用

6. Docker网络

  • 网络模式:bridge, host, none, container:<name|id>
  • 创建自定义网络:docker network create
  • 容器间通信(同一网络内的容器通过服务名通信)

7. Docker存储

  • 数据卷(Volume):创建、使用、备份
  • 绑定挂载(Bind Mount)
  • 临时文件系统(tmpfs)

二、高级部分(底层原理)

1. Docker架构

  • Client-Server架构(Docker客户端与Docker守护进程)
  • 组件:Docker Daemon, Containerd, Runc, Docker CLI

2. 容器核心技术

  • Namespace:实现隔离(PID, IPC, Network, Mount, UTS, User)
  • Cgroups:实现资源限制(CPU、内存、磁盘I/O等)
  • UnionFS(联合文件系统):镜像分层与容器读写层
    • OverlayFS的工作原理(lowerdir, upperdir, merged, workdir)

3. 容器运行时

  • OCI(Open Container Initiative)标准
  • runc:容器运行时实现
  • containerd:管理容器生命周期(创建、启动、停止、删除等)

4. 镜像原理

  • 镜像的分层结构(每一层都是只读的,容器层可写)
  • 镜像存储驱动(Overlay2, aufs, devicemapper等)
  • 镜像分发(Docker Registry V2 API)

5. 容器安全

  • 非root用户运行容器(USER指令)
  • 安全扫描(docker scan
  • 能力(Capabilities)控制(如去掉CAP_SYS_ADMIN
  • Seccomp与AppArmor配置

6. Docker生产环境实践

  • 日志管理(驱动:json-file, syslog, fluentd)
  • 监控方案(cAdvisor, Prometheus+Grafana)
  • 资源限制(CPU、内存、IO)

7. Kubernetes基础

  • 虽然Kubernetes不是Docker,但通常面试会关联
  • 了解Pod、Service、Deployment等概念
  • Docker与Kubernetes的关系(Kubernetes弃用Docker作为运行时?应了解Containerd)

8. CI/CD中的Docker

  • Docker在持续集成/持续部署中的应用
  • 构建优化(利用缓存、构建参数)

三、实验部分

  1. 从零构建一个自定义镜像(如Python应用)
  2. 使用Docker Compose编排多容器应用(如Web+DB)
  3. 调试容器网络问题(如无法连接到另一个容器)
  4. 模拟资源限制(如限制容器内存导致OOM)
  5. 多阶段构建实战(减少镜像体积)

四、常见面试题

  1. 基础问题
    • Docker镜像和容器有什么区别?
    • 如何进入正在运行的容器?docker exec -it <container> /bin/bash
    • 如何清理所有停止的容器?docker container prune
  2. 高级问题
    • 详细描述从docker run到容器启动的过程。
    • 解释OverlayFS的工作机制。
    • 容器如何实现网络隔离的?
  3. 原理问题
    • Cgroup是如何限制容器资源的?
    • Docker是如何利用Namespace隔离的?
    • 容器内进程的PID=1是什么?它有什么特殊责任?
  4. 故障排查
    • 容器启动失败如何查看日志?
    • 如何查看容器占用的磁盘空间?
    • 如何监控容器内进程?
  5. 场景设计
    • 如何优化Docker镜像大小?
    • 如何持久化数据库容器的数据?
    • 如何保证容器时间与宿主机同步?