# Docker 29 核心速查

Source: https://codewiki.com/zh/cheatsheets/docker/

## 环境与 Context

- `docker version` — 显示客户端与所连接引擎的版本
- `docker compose version` — 显示已安装的 Compose 插件版本
- `docker info` — 检查引擎、存储、网络与运行时配置
- `docker context show` — 输出默认使用的 Context
- `docker context ls` — 列出 Context 及其守护进程端点
- `docker context use production` — 把 production 设为后续命令的默认 Context

## Dockerfile 基础

- `FROM node:24-bookworm-slim@sha256:ba849c60be29959425b8734d57b8b4b7d56f98edd9504c9af091d5281095a71e` — 从 2026-09-04 验证过的 Node 24 清单开始构建
- `WORKDIR /app` — 创建或选择供后续指令使用的工作目录
- `COPY --chown=node:node package.json package-lock.json ./` — 先复制依赖元数据，再复制频繁变动的源码
- `RUN --mount=type=cache,target=/root/.npm npm ci --omit=dev` — 严格按锁文件安装，并复用 npm 下载缓存
- `COPY --chown=node:node app.mjs ./` — 复制运行时源码，并在同一层设置所有者
- `USER node` — 让后续指令与容器使用非 root 的 node 用户
- `ENTRYPOINT ["node", "app.mjs"]` — 不经过 shell 启动，让 Node 主进程直接接收信号

## 构建镜像

- `docker build --check .` — 对当前构建上下文执行 Dockerfile 构建检查
- `docker build --pull -t catalog:1.4.0 .` — 刷新基础镜像引用，并构建带标签的本地镜像
- `docker build --no-cache -t catalog:cold .` — 不使用缓存，重新执行构建指令
- `docker build --target test -t catalog:test .` — 构建到名为 test 的阶段
- `docker buildx build --platform linux/amd64,linux/arm64 --push -t registry.example.com/catalog:1.4.0 .` — 构建并推送一个多平台镜像引用
- `docker buildx imagetools inspect registry.example.com/catalog:1.4.0` — 检查仓库清单及其中的平台条目
- `docker image history --no-trunc catalog:1.4.0` — 完整审查每个镜像层对应的命令

## 镜像与仓库

- `docker pull node:24-bookworm-slim` — 下载标签当前指向的清单与缺失镜像层
- `docker image ls --digests` — 列出本地镜像及可用的仓库摘要
- `docker image inspect catalog:1.4.0` — 读取镜像配置与内容标识符
- `docker tag catalog:1.4.0 registry.example.com/catalog:1.4.0` — 为同一个本地镜像添加包含仓库地址的标签
- `docker login registry.example.com` — 通过已配置的凭据流程登录仓库
- `docker push registry.example.com/catalog:1.4.0` — 上传带标签的清单与缺失镜像层
- `docker image rm catalog:1.4.0` — 删除这个本地标签及不再被引用的镜像数据

## 容器生命周期

- `docker run --name catalog-api -d -p 127.0.0.1:3000:3000 catalog:1.4.0` — 创建后台容器，并把端口限制在宿主机本地
- `docker ps --filter name=catalog-api` — 列出名称与 catalog-api 匹配的运行中容器
- `docker ps -a --filter status=exited` — 列出状态为 exited 的已停止容器
- `docker stop --time 30 catalog-api` — 发送停止信号，强制终止前等待三十秒
- `docker start catalog-api` — 重新启动已有的停止容器，不重新创建它
- `docker wait catalog-api` — 等待容器停止并输出其退出码
- `docker rm catalog-api` — 删除已停止容器及其可写层

## 检查与排错

- `docker logs --tail 100 -f catalog-api` — 输出最近一百行日志并继续跟随
- `docker exec -it catalog-api sh` — 在运行中的容器内启动交互式 shell
- `docker inspect --format '{{json .State.Health}}' catalog-api` — 仅以 JSON 输出容器健康状态
- `docker top catalog-api` — 显示宿主机可见的容器内进程
- `docker stats --no-stream catalog-api` — 获取一次 CPU、内存、网络与 I/O 用量快照
- `docker diff catalog-api` — 列出相对镜像基线的文件系统变更
- `docker cp catalog-api:/app/report.json ./report.json` — 把一个文件从容器复制到当前目录

## 网络与端口

- `docker network create catalog-net` — 创建带内置 DNS 的用户自定义桥接网络
- `docker run --name catalog-db -d --network catalog-net postgres:18-alpine@sha256:d3e1620b530c944afa6e887d22eb899824da68e19c52024bf98f5220c88a65b2` — 在应用网络中启动固定摘要的数据库，不向宿主机发布端口
- `docker run --name catalog-api -d --network catalog-net -p 127.0.0.1:3000:3000 catalog:1.4.0` — 加入同一网络，并只发布应用端口
- `docker network connect catalog-net metrics-agent` — 把已有容器接入该网络
- `docker network inspect catalog-net` — 检查已连接容器、地址与网络选项
- `docker port catalog-api 3000` — 显示容器端口 3000 对应的宿主机绑定

## 卷与挂载

- `docker volume create catalog-data` — 创建由 Docker 管理的命名卷
- `docker volume ls` — 列出本地命名卷与匿名卷
- `docker run --name catalog-db -d --mount type=volume,src=catalog-data,dst=/var/lib/postgresql/data postgres:18-alpine@sha256:d3e1620b530c944afa6e887d22eb899824da68e19c52024bf98f5220c88a65b2` — 把数据库文件持久化到容器生命周期之外
- `docker run --rm --mount type=bind,src=/srv/catalog/config,dst=/app/config,readonly catalog:1.4.0` — 以只读方式把一个宿主机目录暴露到明确路径
- `docker volume inspect catalog-data` — 检查卷驱动、挂载点、标签与选项
- `docker volume rm catalog-data` — 永久删除未使用的卷及其数据

## 运行时隔离

- `docker run --rm --user 10001:10001 catalog:1.4.0` — 用明确的非 root UID 与 GID 覆盖镜像用户
- `docker run --rm --read-only --tmpfs /tmp catalog:1.4.0` — 把根文件系统设为只读，并提供可写的内存临时目录
- `docker run --rm --cap-drop=ALL --cap-add=NET_BIND_SERVICE catalog:1.4.0` — 丢弃 Linux capability，再只恢复低端口绑定权限
- `docker run --rm --security-opt no-new-privileges=true catalog:1.4.0` — 阻止进程通过 exec 获得额外权限
- `docker run --rm --memory 512m --cpus 1.0 catalog:1.4.0` — 限制容器的内存与 CPU 配额
- `docker run --rm --pids-limit 200 catalog:1.4.0` — 限制容器可以创建的进程数量
- `docker run --rm --network none catalog:1.4.0` — 启动一个无法连接外部网络的容器

## Compose 服务模型

- `build: { context: . }` — 从当前 Compose 项目上下文构建该服务
- `ports: ['127.0.0.1:3000:3000']` — 仅在宿主机回环地址发布端口 3000
- `depends_on: { db: { condition: service_healthy } }` — 等待 db 通过健康检查，再创建该服务
- `volumes: ['catalog-data:/var/lib/postgresql/data']` — 把命名卷挂载到数据库数据目录
- `read_only: true` — 把服务容器的根文件系统设为只读
- `tmpfs: [/tmp]` — 为服务提供可写的内存临时存储
- `init: true` — 运行小型 init 进程，转发信号并回收子进程

## Compose 工作流

- `docker compose config --quiet` — 静默解析并校验最终 Compose 模型
- `docker compose config --services` — 输出配置解析后的服务名称
- `docker compose pull` — 拉取已声明服务所需的镜像
- `docker compose up --build --wait` — 构建并创建服务，等待服务运行或变为健康
- `docker compose ps` — 显示当前 Compose 项目中的容器
- `docker compose logs --tail 100 -f catalog` — 输出 catalog 服务最近一百行日志并继续跟随
- `docker compose down` — 删除项目容器与网络，但保留命名卷

## 清理前检查

- `docker system df -v` — 删除 Docker 对象前查看详细磁盘占用
- `docker image ls --filter dangling=true` — 列出可按悬空镜像规则清理的无标签镜像
- `docker volume ls --filter dangling=true` — 列出未被任何容器引用的卷
- `docker container prune --filter until=24h` — 删除创建时间超过二十四小时的已停止容器
- `docker image prune` — 交互确认后删除悬空镜像
- `docker buildx prune --filter until=24h` — 交互确认后删除超过二十四小时的构建缓存
- `docker volume prune` — 交互确认后删除未使用的本地匿名卷及其中数据
