KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA

课程导读 · Docker 应用课 — keel 龙骨

Docker 应用课:把容器用对 的参考信息:课程导读 · Docker 应用课

从「会敲命令」到「能预判这份配置在别人机器上会怎么坏」

你现在的起点

先花两分钟对一下。如果你对下面四条的答案都是"是",可以直接跳到章节地图:

  1. 你能说清 docker build . 那个 . 是发给谁的、发了什么;
  2. 你改过 Dockerfile 的指令顺序,并且知道改动会影响构建时间的哪一段;
  3. 你知道 CMD ["node","a.js"] 和 CMD node a.js 除了写法,行为上差在哪;
  4. 你的 compose.yml 里 depends_on 用的是带 condition 的写法,而不是裸列表。

只要有一条不确定,这门课的对应章节就是为你写的。特别提醒第 3 条:它看起来是纯语法问题,实际决定了容器停止时你的优雅退出逻辑有没有机会执行——很多人排查过这个 bug,但没意识到根因在 CMD 的写法上。

一条能走通的学习路径

边界在哪          01 容器与构建上下文
  ↓
怎么被造出来      02 层、缓存与指令顺序
  ↓
写对一份          03 一个真能跑起来的 Dockerfile
  ↓
怎么编排起来      04 Compose:本地编排器
  ↓
东西怎么进去      05 配置与密钥跨边界
  ↓
怎么停下来        06 信号与优雅停机
  ↓
坏了怎么看        07 排障、资源限制与选型边界

01–03 是造镜像:从"上下文里有什么"到"每一层怎么排"再到"逐行写对"。04–06 是跑容器:编排、注入、停机。07 收口到"出事时你手上有什么工具"。

04 与 06 之间有依赖:06 讲的停机链路发生在 04 编排出来的服务上,如果你还没读 04,06 里的 stop_grace_period 会缺少上下文。其余章节可以按需跳读。

章节地图

章 关键问题 你会亲手验证什么
01 容器与构建上下文 docker build . 的 . 是什么?为什么它决定了构建快慢与密钥安全? 用体积统计实测同一目录在 .dockerignore 前后的上下文大小(本机实测 3337.2 KB → 1.1 KB)
02 层、缓存与指令顺序 层的缓存按什么失效?为什么"改一行代码重装依赖"是顺序问题? 逐行对照两个 Dockerfile,指出哪一行会让依赖层在业务代码变更时作废
03 一个真能跑起来的 Dockerfile 多阶段怎么落地?npm ci 与 npm install 什么时候会直接让构建失败? 真跑 npm ci,拿到缺 lockfile 时的 EUSAGE 报错与退出码
04 Compose:本地编排器 depends_on 写了为什么还连不上?变量从哪儿来、谁优先? 用 docker compose config 把 compose.yml 展开成实际生效配置,含变量清单与失败路径
05 配置与密钥跨边界 密钥是怎么被"烤进"镜像的?ARG 和 environment 差在哪? 核对两份 .env 的内容差异,确认 compose 到底读了哪一份
06 信号与优雅停机 容器停止时信号发给了谁?为什么等不到应用自己退出? 从解析结果里读出各服务的 stop_grace_period,并与 CMD 形式对照
07 排障、资源限制与选型边界 容器被杀但日志空白怎么查?exit 137 意味着什么? 核对资源限制被归一化后的实际数值,并列出五条排障命令各自能看到与看不到什么

每章统一以 现场 → 机制推演 → 实测输出 → 生产边界 → 动手 → 故障注入 → 自测 收束。自测题要求解释因果,不要求背命令。

与相邻课程的分工

前置要求

实验环境说明

课程的实测输出来自一台 Windows + Docker CLI 29.2.1 + Node 22.22.2 的机器。其中:

进入 keel 阅读