docker-guide
一、基础部分(基本使用)
1. Docker核心概念
- 镜像(Image)、容器(Container)、仓库(Repository)的概念
- Docker与虚拟机的区别(轻量级、资源共享、启动速度等)
2. Docker安装与配置
- 在不同操作系统(Linux, Windows, macOS)上的安装
- 配置镜像加速器(阿里云等)
3. 基本命令操作
- 镜像管理:
docker pull
、docker images
、docker rmi
、docker build
(Dockerfile)docker tag
、docker push
、docker save
、docker load
- 容器管理:
docker run
(各种参数:-d
,-p
,-v
,--name
,--network
,--restart
等)docker ps
、docker stop
、docker start
、docker restart
、docker rm
docker logs
、docker exec
、docker inspect
- 其他常用命令:
docker info
、docker version
、docker 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在持续集成/持续部署中的应用
- 构建优化(利用缓存、构建参数)
三、实验部分
- 从零构建一个自定义镜像(如Python应用)
- 使用Docker Compose编排多容器应用(如Web+DB)
- 调试容器网络问题(如无法连接到另一个容器)
- 模拟资源限制(如限制容器内存导致OOM)
- 多阶段构建实战(减少镜像体积)
四、常见面试题
- 基础问题:
- Docker镜像和容器有什么区别?
- 如何进入正在运行的容器?
docker exec -it <container> /bin/bash
- 如何清理所有停止的容器?
docker container prune
- 高级问题:
- 详细描述从
docker run
到容器启动的过程。 - 解释OverlayFS的工作机制。
- 容器如何实现网络隔离的?
- 详细描述从
- 原理问题:
- Cgroup是如何限制容器资源的?
- Docker是如何利用Namespace隔离的?
- 容器内进程的PID=1是什么?它有什么特殊责任?
- 故障排查:
- 容器启动失败如何查看日志?
- 如何查看容器占用的磁盘空间?
- 如何监控容器内进程?
- 场景设计:
- 如何优化Docker镜像大小?
- 如何持久化数据库容器的数据?
- 如何保证容器时间与宿主机同步?
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.