SuperAPI AI 工具集

docker-ops

部署与运维

查看项目

更新于 10-13 16:41

技能介绍

用途

docker-ops 是一份关于 Docker 容器化模式的技能文档,适用于构建、运行和编排容器化应用。它围绕 Dockerfile、多阶段构建与 Docker Compose 提供实践指导。原文明确其使用场景包括:docker、Dockerfile、docker-compose、container 等。

主要能力

Dockerfile 最佳实践

文档以对照表形式列出推荐做法与应避免做法,包括:

  • 基础镜像:使用 FROM node:20-slim,避免 FROM node:latest。
  • 层缓存:先复制依赖文件,再复制源码,避免先 COPY . . 后安装。
  • 包安装:apt-get update && apt-get install -y ... && rm -rf /var/lib/apt/lists/*,避免 update 与 install 分开 RUN。
  • 用户:使用 USER nonroot(必要时创建),避免生产环境以 root 运行。
  • 多阶段:分离构建与运行阶段,避免携带编译器工具链。
  • 密钥:使用 --mount=type=secret(BuildKit),避免 COPY .env . 或 ARG PASSWORD。
  • ENTRYPOINT 与 CMD:ENTRYPOINT 用于固定二进制,CMD 用于默认值,避免依赖 shell 形式处理信号。
  • WORKDIR:使用 WORKDIR /app,避免 RUN cd /app && ...。
  • .dockerignore:应包含 .git、node_modules、__pycache__。
  • 标签:使用 LABEL org.opencontainers.image.*。

多阶段构建决策

按语言选择运行时基础镜像:

  • Go:禁用 CGO 时用 scratch 或 distroless/static;否则用 distroless/base 或 alpine。
  • Rust:静态 musl 时用 scratch 或 distroless/static;否则用 distroless/cc 或 debian-slim。
  • Node.js:需要原生模块时用 node:20-slim;否则用更小的 node:20-alpine。
  • Python:需要 C 库时用 python:3.12-slim;否则仍用 python:3.12-slim。
  • Java:仅 JRE 时用 eclipse-temurin:21-jre-alpine。

完整示例见 references/multi-stage-builds.md。

层缓存规则

Docker 缓存每一层,第 N 层缓存失效会使后续所有层失效。导致缓存失效的因素包括:COPY/ADD 中文件变更、RUN 命令文本变更、ARG 值变更、--no-cache 标志、基础镜像更新。

最优层顺序为:基础镜像 → 系统依赖 → 依赖文件 → 应用代码 → 运行时配置。经验法则:按变化频率从低到高排列层。

.dockerignore 要点

应忽略版本控制文件(.git、.gitignore)、依赖(node_modules、pycache、.pyc、.venv、vendor/)、构建产物(dist/、build/、target/、.egg-info)、IDE 文件、Docker 文件(防止递归上下文)、环境与密钥(.env、.pem、.key)、文档与测试。若无 .dockerignore,docker build 会把整个上下文目录发送到守护进程,仅 .git 文件夹就可能增加数百 MB。

Docker Compose 快速参考

服务定义示例包含 build(context、dockerfile、target)、image、ports、environment、env_file、volumes(绑定挂载与命名卷)、depends_on(condition: service_healthy)、healthcheck、restart、networks。

卷与网络示例包含命名卷、driver,以及 bridge 驱动的后端与前端网络。完整模式(profiles、watch 模式、override 文件)见 references/compose-patterns.md。

对于带 .ddev/ 文件夹的 PHP/CMS 项目,DDEV 会生成自己的 compose 文件,不要手写并行栈;应使用 ddev-ops,额外服务放在 .ddev/docker-compose.<name>.yaml 中。

安全快速参考

  • 用户:以非 root 运行,如 RUN adduser -D appuser && USER appuser。
  • 基础镜像:固定 digest,如 FROM python:3.12-slim@sha256:abc123...。
  • 文件系统:只读根,如 docker run --read-only --tmpfs /tmp。
  • 能力:全部丢弃后按需添加,如 --cap-drop=ALL --cap-add=NET_BIND_SERVICE。
  • 密钥:BuildKit 密钥,如 RUN --mount=type=secret,id=key cat /run/secrets/key。
  • 扫描:使用 trivy image myapp:latest 或 grype myapp:latest。
  • 不使用 latest,固定具体标签与版本。
  • 尽量使用 distroless 或 scratch 等最小镜像。
  • 去除 SUID:RUN find / -perm /6000 -type f -exec chmod a-s {} +。
  • 网络:后端服务使用内部网络。

非 root 用户模式给出 Debian/Ubuntu、Alpine 与 Distroless 三种写法。

常见陷阱与修复

文档列出大镜像、缓存失效、密钥进入层、PID 1 问题、时区、DNS 缓存、apt 缓存、信号缺失、构建上下文大小、层爆炸等陷阱及其修复方式,并提供 PID 1 / 信号处理修复示例(tini、docker run --init、在代码中处理信号)。

常用 Docker 命令

包含 build(含 --target、--no-cache)、run(含 --rm -it、--read-only)、inspect(images、history、inspect)、调试(exec、logs、stats)、清理(system prune、image prune)等命令示例。

参考文件

  • references/multi-stage-builds.md:各语言多阶段模式(Go、Rust、Node、Python)。
  • references/compose-patterns.md:Compose 服务、网络、profiles、watch、overrides。
  • references/optimization.md:镜像大小、BuildKit、安全扫描、调试。

在 RUN 步骤中仅从锁文件安装:npm ci(或对应管理器的冻结安装)以及 composer install --no-dev --optimize-autoloader。各管理器所需命令及为何镜像中使用 npm install 是 bug,见 package-manager-ops。

使用方式

该技能通过名称 docker-ops 引用,来源为 0xdarkmatter/claude-mods,URL 为 https://www.skills.sh/0xdarkmatter/claude-mods/docker-ops。原文未提供具体安装步骤或调用命令。

适用场景

适用于需要编写或优化 Dockerfile、设计多阶段构建、配置 Docker Compose、加固容器安全、排查镜像大小与缓存问题的场景。

限制

原文未提供收费、价格、平台支持范围等具体信息。技能的实际可用性与集成方式需参考其来源仓库。