40 lines
973 B
Docker
40 lines
973 B
Docker
# Dockerfile 示例
|
|
# 展示如何构建包含迁移工具的 Go 应用
|
|
|
|
# ===== 构建阶段 =====
|
|
FROM golang:1.21 as builder
|
|
|
|
WORKDIR /app
|
|
COPY go.mod go.sum ./
|
|
RUN go mod download
|
|
|
|
COPY . .
|
|
|
|
# 编译应用和迁移工具
|
|
RUN go build -o bin/server cmd/server/main.go
|
|
RUN go build -o bin/migrate cmd/migrate/main.go
|
|
|
|
# ===== 运行阶段 =====
|
|
FROM debian:bookworm-slim
|
|
|
|
WORKDIR /app
|
|
|
|
# 安装运行时依赖
|
|
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
|
|
|
|
# 复制二进制文件和迁移文件
|
|
COPY --from=builder /app/bin/server .
|
|
COPY --from=builder /app/bin/migrate .
|
|
COPY --from=builder /app/migrations ./migrations
|
|
|
|
EXPOSE 8080
|
|
|
|
# 启动:先执行迁移,再启动应用
|
|
CMD ["sh", "-c", "./migrate up && ./server"]
|
|
|
|
# 注意:
|
|
# 1. 配置文件通过 docker-compose volumes 挂载,不打包进镜像
|
|
# 2. 镜像只包含二进制文件和迁移SQL文件
|
|
# 3. 配置文件在运行时提供,更安全、更灵活
|
|
|