Docker2026-04-15·8 分钟
Docker 镜像构建与标签管理
介绍 Docker 镜像的构建、标签、缓存、推送与清理实战方法。
Docker 镜像构建与标签管理
1. 选择基础镜像
- 优先选择官方镜像或经过认证的小体积基础镜像。
alpine、distroless、slim常用于减小镜像体积。
dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . ./
CMD ["node", "server.js"]2. 使用标签管理版本
bash
docker build -t myapp:1.0.0 .
docker build -t myapp:latest .latest适合默认镜像引用;生产环境应使用语义化版本号。docker images列出已有镜像。
3. 构建缓存优化
- 将不常变化的层放在
Dockerfile前部。 - 使用
COPY package*.json ./+RUN npm install,避免每次复制源代码后重新安装依赖。
dockerfile
COPY package*.json ./
RUN npm ci --production
COPY . ./- 通过
--cache-from在 CI 中复用镜像缓存:
bash
docker build --cache-from myapp:latest -t myapp:1.0.0 .4. 构建参数与 secrets
- 使用
--build-arg传递构建时变量。 - 敏感信息不要写入镜像,改用 Docker buildkit 或运行时注入。
bash
docker build --build-arg NODE_ENV=production -t myapp:1.0.0 .5. 多阶段构建
- 多阶段构建适合前端资源编译、Go/Java 等需要编译的应用。
dockerfile
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . ./
RUN npm run build
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY package*.json ./
RUN npm ci --production
CMD ["node", "dist/index.js"]6. 推送到远程仓库
bash
docker tag myapp:1.0.0 registry.example.com/myorg/myapp:1.0.0
docker push registry.example.com/myorg/myapp:1.0.0- 使用私有仓库时,先
docker login registry.example.com。 - 常用仓库:Docker Hub、GitHub Container Registry、Harbor、阿里云镜像服务。
7. 镜像清理与空间管理
bash
docker image prune -a
docker system prune -aimage prune -a删除未被容器引用的镜像。system prune -a会删除未使用的容器、网络、镜像和构建缓存。
8. 常见问题
- 构建失败:检查
Dockerfile语法、文件路径、上下文内容。 - 镜像过大:减少层、删除开发依赖、使用多阶段构建。
- 运行出现
no such file or directory:确认WORKDIR、COPY目标路径和可执行文件存在。
Docker镜像构建