Project 6: 部署上线
学习目标
- 构建优化的 Docker 镜像
- 编写 K8s 部署清单
1. Docker 多阶段构建
dockerfile
# Build stage
FROM golang:1.26-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o server ./cmd/server
# Run stage
FROM alpine:3.20
RUN apk --no-cache add ca-certificates tzdata
WORKDIR /app
COPY --from=builder /app/server .
COPY config.yaml .
EXPOSE 8080
CMD ["./server"]2. Kubernetes 部署
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: blog-api
spec:
replicas: 3
selector:
matchLabels:
app: blog-api
template:
metadata:
labels:
app: blog-api
spec:
containers:
- name: api
image: pfinal/blog-api:latest
ports:
- containerPort: 8080
livenessProbe:
httpGet: { path: /health, port: 8080 }
resources:
requests: { cpu: "200m", memory: "256Mi" }
limits: { cpu: "1000m", memory: "512Mi" }
