60 lines
1.3 KiB
Docker
60 lines
1.3 KiB
Docker
# 使用官方Rust镜像作为构建阶段
|
|
FROM rust:1.75-slim as builder
|
|
|
|
# 设置工作目录
|
|
WORKDIR /usr/src/app
|
|
|
|
# 复制Cargo.toml和Cargo.lock文件
|
|
COPY Cargo.toml Cargo.lock ./
|
|
|
|
# 创建一个虚拟的main.rs来缓存依赖
|
|
RUN mkdir src && echo "fn main() {}" > src/main.rs
|
|
|
|
# 构建依赖(这会缓存依赖层)
|
|
RUN cargo build --release
|
|
|
|
# 删除虚拟的main.rs
|
|
RUN rm src/main.rs
|
|
|
|
# 复制源代码
|
|
COPY src ./src
|
|
|
|
# 重新构建应用程序(现在会使用缓存的依赖)
|
|
RUN cargo build --release
|
|
|
|
# 运行时阶段
|
|
FROM debian:bookworm-slim
|
|
|
|
# 安装运行时依赖
|
|
RUN apt-get update && apt-get install -y \
|
|
ca-certificates \
|
|
libpq-dev \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# 创建非root用户
|
|
RUN groupadd -r appuser && useradd -r -g appuser appuser
|
|
|
|
# 设置工作目录
|
|
WORKDIR /app
|
|
|
|
# 从构建阶段复制二进制文件
|
|
COPY --from=builder /usr/src/app/target/release/mapp-tile /app/mapp-tile
|
|
|
|
# 复制配置文件(如果有的话)
|
|
COPY .env* ./
|
|
|
|
# 更改文件所有权
|
|
RUN chown -R appuser:appuser /app
|
|
|
|
# 切换到非root用户
|
|
USER appuser
|
|
|
|
# 暴露端口(根据您的应用程序需要调整)
|
|
EXPOSE 3000
|
|
|
|
# 设置健康检查
|
|
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
|
CMD curl -f http://localhost:3000/api/v1/health || exit 1
|
|
|
|
# 运行应用程序
|
|
CMD ["./mapp-tile"] |