容器把应用及其依赖打包成可在不同环境一致运行的单元;Docker 是最常用的实现与工具链之一。 镜像(image)是只读模板,容器(container)是镜像运行起来的可写实例——类比「类与对象」有助于记忆。
入门:镜像里有什么
- 分层文件系统(union/overlay):多条只读层 + 一条可写层;共享层可节省磁盘与拉取时间。
- 元数据:默认入口命令、环境变量、暴露端口声明等。
入门:容器与虚拟机差异(心智)
容器共享宿主内核,启动更快、开销更小,但隔离边界不同于完整 VM; 安全模型需结合 namespace/cgroup、seccomp、用户命名空间与镜像供应链(签名、漏洞扫描)。
深入:Dockerfile 常见层面
- FROM:基础镜像选择决定补丁责任与攻击面。
- RUN:构建期执行;合并命令减少层数是一种优化,但可读性需权衡。
- USER:避免以 root 运行业务进程(能力需求除外)。
- HEALTHCHECK:编排系统可据此重启不健康实例。
深入:数据放在哪
容器内写磁盘默认在可写层,删除容器即可能丢失;持久化应使用卷(volume)或绑定挂载(bind mount),并注意权限与 SELinux 标签。
与进程、cgroup
见 进程与线程:容器本质仍是一组进程,受 cgroup 限制资源。
Kubernetes、Podman、nerdctl 等与 Docker CLI 概念相通但细节不同;生产安全基线请以组织规范与 CVE 通告为准。