omnisealbench_mduppes / Dockerfile
Mark Duppenthaler
Test docker
9a03fcf
# Multi-stage Dockerfile for OmniSealBench
# Stage 1: Build the React frontend
FROM node:18-alpine AS frontend-builder
WORKDIR /app/frontend
# Copy package.json
COPY frontend/package.json ./
# Install dependencies
RUN npm install
# Copy frontend source code
COPY frontend/ ./
# Build the React app
RUN npm run build
# Stage 2: Set up the Flask backend and serve the app
FROM python:3.10-slim
WORKDIR /app
# Copy backend requirements and install dependencies
COPY backend/requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
# Copy backend code
COPY backend/ ./
# Copy built frontend from the frontend-builder stage
COPY --from=frontend-builder /app/frontend/dist ./static
# Copy data and examples directories
COPY data/ ./data/
COPY examples/ ./examples/
# Set environment variables
ENV FLASK_APP=app.py
ENV FLASK_ENV=production
# Expose the port the app runs on
EXPOSE 5000
# Copy startup and healthcheck scripts and make them executable
COPY backend/start.sh backend/healthcheck.sh ./
RUN chmod +x ./start.sh ./healthcheck.sh
# Install curl for healthcheck
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
# Add healthcheck
HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 CMD ["./healthcheck.sh"]
# Command to run the app using the startup script
CMD ["./start.sh"]