install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/image-management" ~/.claude/skills/majiayu000-claude-skill-registry-image-management && rm -rf "$T"
manifest:
skills/data/image-management/SKILL.mdsource content
Docker 镜像管理
概述
镜像构建、多阶段构建、镜像优化等技能。
镜像操作
查看镜像
# 列出镜像 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 顺序、文件变更 |