npx machina-cli add skill chaterm/terminal-skills/image-management --openclawDocker 镜像管理
概述
镜像构建、多阶段构建、镜像优化等技能。
镜像操作
查看镜像
# 列出镜像
docker images
docker images -a # 包含中间层
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
# 镜像详情
docker inspect image_name
docker history image_name # 构建历史
# 搜索镜像
docker search nginx
拉取与推送
# 拉取镜像
docker pull nginx
docker pull nginx:1.20
docker pull registry.example.com/myapp:latest
# 推送镜像
docker push myrepo/myimage:tag
# 登录仓库
docker login
docker login registry.example.com
docker logout
镜像标签
# 添加标签
docker tag source_image:tag target_image:tag
docker tag myapp:latest myrepo/myapp:v1.0
# 删除镜像
docker rmi image_name
docker rmi -f image_name # 强制删除
docker image prune # 删除悬空镜像
docker image prune -a # 删除未使用镜像
导入导出
# 导出镜像
docker save -o myimage.tar myimage:tag
docker save myimage:tag | gzip > myimage.tar.gz
# 导入镜像
docker load -i myimage.tar
docker load < myimage.tar.gz
镜像构建
基础构建
# 构建镜像
docker build -t myimage:tag .
docker build -t myimage:tag -f Dockerfile.prod .
# 指定构建参数
docker build --build-arg VERSION=1.0 -t myimage:tag .
# 不使用缓存
docker build --no-cache -t myimage:tag .
# 指定目标阶段
docker build --target builder -t myimage:builder .
Dockerfile 基础
# 基础镜像
FROM node:18-alpine
# 元数据
LABEL maintainer="your@email.com"
LABEL version="1.0"
# 设置工作目录
WORKDIR /app
# 复制文件
COPY package*.json ./
COPY . .
# 运行命令
RUN npm install
# 环境变量
ENV NODE_ENV=production
ENV PORT=3000
# 暴露端口
EXPOSE 3000
# 启动命令
CMD ["node", "app.js"]
多阶段构建
# 构建阶段
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# 生产阶段
FROM node:18-alpine AS production
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/main.js"]
Go 应用多阶段构建
# 构建阶段
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o main .
# 生产阶段
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/main .
EXPOSE 8080
CMD ["./main"]
镜像优化
减小镜像体积
# 1. 使用精简基础镜像
FROM alpine:latest
FROM node:18-alpine
FROM python:3.11-slim
# 2. 合并 RUN 命令
RUN apt-get update && \
apt-get install -y --no-install-recommends \
package1 \
package2 && \
rm -rf /var/lib/apt/lists/*
# 3. 使用 .dockerignore
# .dockerignore 文件
node_modules
.git
*.md
Dockerfile
.dockerignore
# 4. 多阶段构建只复制必要文件
COPY --from=builder /app/dist ./dist
构建缓存优化
# 先复制依赖文件,利用缓存
COPY package*.json ./
RUN npm ci
# 再复制源代码
COPY . .
RUN npm run build
安全最佳实践
# 1. 使用非 root 用户
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
# 2. 固定版本
FROM node:18.17.0-alpine3.18
# 3. 扫描漏洞
# docker scan myimage:tag
# 4. 最小权限
RUN chmod 500 /app/main
私有仓库
搭建私有仓库
# 运行 Registry
docker run -d -p 5000:5000 --name registry registry:2
# 推送到私有仓库
docker tag myimage:tag localhost:5000/myimage:tag
docker push localhost:5000/myimage:tag
# 拉取
docker pull localhost:5000/myimage:tag
配置认证
# 创建密码文件
htpasswd -Bc /auth/htpasswd admin
# 运行带认证的 Registry
docker run -d -p 5000:5000 \
-v /auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
registry:2
常见场景
场景 1:分析镜像层
# 查看镜像层
docker history myimage:tag --no-trunc
# 使用 dive 分析
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
wagoodman/dive:latest myimage:tag
场景 2:清理磁盘空间
# 查看磁盘使用
docker system df
docker system df -v
# 清理未使用资源
docker system prune # 清理悬空资源
docker system prune -a # 清理所有未使用资源
docker system prune --volumes # 包括卷
场景 3:镜像漏洞扫描
# Docker Scout
docker scout cves myimage:tag
# Trivy
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
aquasec/trivy image myimage:tag
故障排查
| 问题 | 排查方法 |
|---|---|
| 构建失败 | 检查 Dockerfile 语法、网络 |
| 镜像过大 | 使用多阶段构建、精简基础镜像 |
| 拉取失败 | 检查网络、认证、镜像名 |
| 缓存失效 | 检查 COPY 顺序、文件变更 |
Source
git clone https://github.com/chaterm/terminal-skills/blob/main/docker/image-management/SKILL.mdView on GitHub Overview
你可以借助 image-management 快速完成镜像的发现、获取、分发和生产就绪的构建,以及镜像优化和私有仓库集成。它提供面向实际工作流的命令示例与最佳实践,帮助你提升镜像质量、缩短构建时间,并在 CI/CD 流程中更高效地使用镜像。
How This Skill Works
该技能将常用的 Docker CLI 操作封装成清晰的工作流程:查看与搜索镜像(docker images、docker inspect、docker history、docker search),拉取/推送并管理认证(docker pull、docker push、docker login、docker logout),标签与清理(docker tag、docker rmi、镜像清理命令),导入导出(docker save/load),以及构建与优化(docker build、多阶段构建、基础和安全实践、.dockerignore 的应用)。同时提供私有仓库集成、镜像标签策略和漏洞/安全相关的实践建议。
When to Use It
- 你需要快速查看镜像及其历史与中间层以诊断镜像体积问题
- 你要构建生产就绪的镜像,建议使用多阶段构建以减小体积
- 你需要把镜像推送到私有仓库,或从私有仓库拉取进行部署
- 你需要将镜像导出导入以在离线环境中分发或备份
- 你关注镜像安全与合规性,需进行漏洞扫描与最小权限配置
Quick Start
- 查看本地镜像和历史以了解现状,例如查看镜像列表与详细信息
- 编写或使用一个 Dockerfile,实践基础构建和多阶段构建
- 构建本地镜像并运行进行本地验证
- 配置私有仓库并将镜像推送到私有 Registry,或从私有仓库拉取以部署
Best Practices
- 使用多阶段构建以产生生产镜像,确保产物仅包含实际需要的文件
- 使用 .dockerignore 排除无关文件,减少上下文传输与镜像体积
- 生产镜像尽量固定版本标签,避免依赖 latest 的不可重复性
- 在镜像中尽量避免使用 root 用户,提升安全性与可控性
- 对镜像进行漏洞扫描与合规检查,结合 CI/CD 自动化执行
Example Use Cases
- 示例 1:Node.js 应用的多阶段构建,将构建阶段的依赖与产物分离,在生产阶段只拷贝 dist 与必要依赖以减小体积
- 示例 2:Go 应用的多阶段构建,构建阶段使用 go toolchain 产出可执行文件,生产阶段仅包含该可执行文件及所需证书与配置
- 示例 3:搭建私有仓库并进行认证,推送本地镜像到 localhost:5000/myimage:tag,及从私有仓库拉取部署到生产环境
- 示例 4:镜像清理和缓存优化,使用 docker image prune 和 docker system prune 清理悬空资源,同时通过分层缓存优化构建时间
Frequently Asked Questions
Related Skills
container-ops
chaterm/terminal-skills
Docker 容器操作与管理
compose
chaterm/terminal-skills
Docker Compose 编排
dockerfile
chaterm/terminal-skills
Dockerfile 编写最佳实践
networking
chaterm/terminal-skills
Docker 容器网络
Cross-Platform Build Expert
martinholovsky/claude-skills-generator
Expert in building desktop applications for Windows, macOS, and Linux with focus on platform-specific configurations, code signing, and distribution requirements
shell-review
athola/claude-night-market
Audit shell scripts for correctness, portability, and common pitfalls.