Docker:安装连接、镜像与容器生命周期
Docker 管理的是镜像、容器进程、网络和数据卷。先分清镜像内容、容器可写层与挂载数据,再学习 Compose 部署;发布和恢复时必须同时记录镜像版本、配置与卷的对应关系。
按任务阅读
| 当前任务 | 阅读内容 | 应掌握的结果 |
|---|---|---|
| 认识环境与基本操作 | 本篇的环境前提、基本对象与操作 | 说明管理的对象、执行身份和配置位置 |
| 理解机制并完成配置 | 构建、PID 1、网络与卷;Compose 双服务部署与持久数据 | 解释关键机制,按配置完成任务并核对结果 |
| 维护、排障与恢复 | 镜像发布、备份恢复与升级;容器退出、网络与存储排障;升级后数据归零的恢复与复盘 | 能保存证据、控制变更、恢复并验收 |
本课程只阅读和推演,不要求安装 Docker。示例未执行,文中的命令全部留给读者在自己的隔离环境决定是否运行。Compose 作为 Docker 内部编排能力讲解,不单列技术主题。
适用范围
Docker 版本边界应按组件分别判断:本文采用 Linux 容器、Engine 的 OCI 镜像/容器模型、BuildKit Dockerfile frontend 1 与现代 Compose Specification;不把 Engine、Desktop、Buildx 和 Compose 的版本号混成一个版本。2026-10-17 核对官方机制文档,不宣称某个补丁号是当前 latest。示例基础镜像使用 Python 3.13 版本族的 slim 标签,标签可移动,读者发布时还需核对支持期、平台 manifest 和 digest。
Linux Engine 共享宿主 Linux 内核;Windows 使用 Docker Desktop 的 Linux 容器模式时,实际内核、卷路径与资源上限属于 Linux VM/WSL2 边界。Windows 容器镜像不是本例目标,Linux UID/GID、信号、权限与路径不能直接套到 Windows 容器。macOS 不纳入。课程不探测本机 Docker 版本。
客户端与守护进程
Docker 客户端将请求发给选定 Context 的 Engine API,daemon 再借助 containerd/runc 管理进程。终端所在机器不必是容器所在机器;bind mount 的宿主路径属于 daemon 主机。把客户端当前目录与远程主机路径混为一谈,会产生“文件在本机存在却挂载失败”的假象。
镜像是配置与只读层的分发对象;容器是从镜像创建的运行配置、可写层和进程生命周期。容器停止不删除可写层,容器删除才丢失这部分状态;named volume 有独立生命周期。重启旧容器也不会自动换成刚拉取的新镜像。
命令的对象与影响
Docker 命令阅读要先识别对象和影响:image inspect 看镜像元数据,container inspect 看实际容器配置,logs 看标准输出,compose ps 看项目实例。build 会执行构建步骤;pull、up、run、exec 会下载、创建或运行对象。compose config 展示解析后的配置模型,不能证明镜像可用或服务运行正常。
# 以下仅供读者未来自行使用,并非本轮执行记录
cd examples/m5-docker
docker compose up --build -d
docker compose ps
docker compose logs --tail=50运行前必须自己确认 Context、镜像来源、18080 端口占用、可写数据卷、构建网络与资源容量。完整文件及结果推演见应用项目。不要在仓库根目录构建本站应用的 Dockerfile;练习有自己的目录。
练习与解答
问题:远程 Context 下,为什么本机的 /srv/config 不能直接作为容器配置?答案:daemon 解释 bind mount 源路径,本机路径并不自动上传。应把配置纳入镜像、显式分发到 daemon 主机或选用受控配置管理,不能靠反复重启解决路径归属错误。
问题:删掉容器后计数是否保留?答案:只有写到本例 counter named volume 的 SQLite 数据保留;写到镜像之上的可写层的数据随容器删除。镜像备份也不包含卷数据。
深入手册与来源
既有版本与架构、安装配置保留了组件链路、Rootless、Context、daemon 与防火墙细节,适合按任务查阅。旧页 2026-08-12 的版本表只是当时快照,不作为本课程当前版本保证。
一手依据:Docker 架构、Compose 应用模型。Docker 官方主要以英文维护;中文机制术语另与 Kubernetes 官方中文容器/工作负载文档交叉辨析,不能拿第三方 Docker 中文翻译作为版本事实。
按对象选择 Compose 操作
Compose 的 up、start、run 和 down 操作的对象有什么区别? 阅读 Compose 命令时先分清配置模型、镜像产物和运行实例。旧命令表把 up、start、run 放在一起,容易掩盖它们的对象差别:up 协调服务配置并创建所需实例,start 面向已有但停止的容器,run 为一次性任务创建容器。build、pull、push 改变或传输镜像;ps、logs 帮助观察项目;config 展示解析后的模型,输出可能展开敏感变量,不能直接公开。pause/unpause 暂停或恢复进程,不能当成数据一致备份。现代命令写作 docker compose;旧 docker-compose 的 scale 拼法和旧 YAML version 标记不作为当前操作合同。
停止、移除和清理数据也须分开。stop 保留容器,rm 面向停止的容器,down 还会清理项目所管理的容器和网络;是否涉及卷取决于选项与对象归属。对本文计数项目,应先明确 counter 卷是否需要保留,再决定清理范围。不要将“列表删除”中的命令替换直接用于共享主机。这里只解释操作影响,没有运行任何命令。Compose 服务定义与网络生命周期是核对入口(2026-10-17)。
继续阅读
- 命令
- 命令
- 故障排查