SuperAPI AI 工具集

docker

部署与运维

查看项目

更新于 10-15 20:31

技能介绍

用途:帮助为应用构建生产可用的 Docker 镜像,强调「一个镜像一个进程」;多服务、网络与共享卷交给 docker-compose。使用前先检测运行时(package.json、Gemfile、mix.exs、go.mod、Cargo.toml、pyproject.toml)并据此适配,不要照搬 Node 的 Dockerfile 到 Elixir 等项目。

主要规则:固定标签(如 node:22-alpine,必要时用 digest),避免生产使用 latest;采用多阶段构建,构建工具留在 build 阶段,最终运行阶段保持最小;在第一次 COPY . . 之前先写 .dockerignore,避免 node_modules、.git 与密钥进入构建上下文;密钥只在运行时注入(ENV、文件、编排器),禁止 COPY .env 或在 Dockerfile 里写 ENV API_KEY;以非 root USER 运行;长驻服务需 HEALTHCHECK。

使用方式:.dockerignore 应覆盖 .git、.env、node_modules、dist、target、_build、deps、.venv、coverage、Dockerfile 本身与 compose 文件,但不要忽略构建所需的 lockfile。多阶段结构为 deps(复制 lockfile 后 npm ci)→ build(COPY 源码并构建、prune)→ runner(复制产物、useradd、USER、EXPOSE、HEALTHCHECK、CMD)。不同栈对应不同构建与运行方式,如 Go 用 CGO_ENABLED=0 go build 配合 distroless/scratch,Rust 用 cargo build --release。构建示例:docker build -t myapp:$(git rev-parse --short HEAD) .、docker build --target build .、RUN --mount=type=cache,target=/root/.npm npm ci。

适用场景:为 Node、Rails、Phoenix、Go、Rust 等生成生产镜像,并在上线前配合 production-readiness 检查。

限制:EXPOSE 仅作文档,实际绑定在 run/compose;丢弃 capabilities 与只读文件系统由 compose/k8s 负责;Alpine 需 native 依赖可编译,musl 不兼容时改用 Debian slim。具体版本、平台与其余细节以实际项目为准。