Docker 与容器化
wescode 提供 AI 辅助的 Docker 和容器化开发体验,从编写 Dockerfile 到编排多服务应用。
Dockerfile 编写
AI 生成 Dockerfile
AI 根据项目类型生成优化的 Dockerfile:
"为这个 Go 项目生成一个多阶段构建的 Dockerfile"
AI 生成示例:
# 构建阶段
FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o /app/server ./cmd/server
# 运行阶段
FROM alpine:3.19
RUN apk add --no-cache ca-certificates tzdata
COPY --from=builder /app/server /usr/local/bin/server
EXPOSE 8080
USER nobody
ENTRYPOINT ["server"]
Dockerfile 优化
AI 分析并优化现有 Dockerfile:
| 优化项 | 说明 |
|---|---|
| 多阶段构建 | 减小最终镜像体积 |
| 层缓存 | 依赖声明先 COPY,源码后 COPY |
| 最小基础镜像 | alpine / distroless / scratch |
| 安全加固 | 非 root 用户、只读文件系统 |
| .dockerignore | 排除不需要的文件 |
Docker Compose
多服务编排
AI 生成完整的 docker-compose 配置:
"为这个项目配置 docker-compose,需要 PostgreSQL、Redis 和 Nginx"
AI 会生成:
- 服务定义和依赖关系
- 网络配置
- 卷挂载
- 环境变量管理
- 健康检查
- 重启策略
开发环境 vs 生产环境
AI 分别生成开发和生产配置:
- 开发:源码挂载、热重载、调试端口
- 生产:构建镜像、资源限制、日志配置
容器调试
在 wescode 中调试容器
AI 帮助排查容器问题:
"容器启动报错 exit code 1,帮我看看"
"为什么这个服务连不上数据库"
"容器内存占用异常增长"
常见问题排查
- 端口冲突
- 卷权限问题
- 网络连接问题
- 环境变量缺失
- 依赖服务未就绪
镜像管理
镜像构建最佳实践
- 使用精确的基础镜像标签(不用
latest) - 合并 RUN 指令减少层数
- 清理构建缓存和临时文件
- 使用 BuildKit 特性
- 扫描安全漏洞
镜像体积优化
AI 分析镜像层并建议优化:
"分析一下这个镜像为什么有 800MB"
→ 识别大文件和不必要的依赖
→ 建议多阶段构建策略
→ 推荐更小的基础镜像
Kubernetes 辅助
资源清单生成
AI 生成 K8s 资源清单:
- Deployment
- Service
- ConfigMap / Secret
- Ingress
- HPA(自动伸缩)
- PVC(持久化存储)
Helm Chart
AI 辅助创建和修改 Helm Chart:
- values.yaml 设计
- 模板编写
- 依赖管理
- 环境覆盖
CI/CD 容器化
GitHub Actions + Docker
AI 生成 Docker 相关的 CI/CD 配置:
# AI 生成的构建和推送流水线
name: Build and Push
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- uses: docker/build-push-action@v5
with:
push: true
tags: registry/app:latest
cache-from: type=gha
cache-to: type=gha,mode=max
注意事项
- 不要在镜像中包含敏感信息(密钥、凭据)
- 生产镜像使用固定版本标签
- 定期更新基础镜像修复安全漏洞
- 容器日志输出到 stdout/stderr
- 容器应该是无状态的,状态存储在外部