# Build stage FROM python:3.9-slim AS builder # Set environment variables to avoid interactive prompts ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ DEBIAN_FRONTEND=noninteractive # Update package lists and install build dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ g++ \ libc6-dev \ libffi-dev \ libssl-dev \ make \ && rm -rf /var/lib/apt/lists/* # Upgrade pip to latest version RUN pip install --upgrade pip # Install MkDocs and plugins with exact versions RUN pip install --no-cache-dir \ mkdocs==1.6.1 \ mkdocs-material==9.5.39 \ mkdocs-macros-plugin==1.2.0 \ mkdocs-minify-plugin==0.8.0 \ mkdocs-awesome-pages-plugin==2.9.2 \ mkdocs-glightbox==0.4.0 # Set working directory WORKDIR /docs # Copy configuration and docs COPY mkdocs.yml . COPY docs/ ./docs/ # Build the static site with strict mode RUN mkdocs build --strict # Runtime stage FROM python:3.9-slim # Install wget for healthcheck RUN apt-get update && apt-get install -y --no-install-recommends \ wget \ && rm -rf /var/lib/apt/lists/* # Set working directory WORKDIR /site # Copy the built site from the builder stage COPY --from=builder /docs/site . # Expose port 80 EXPOSE 80 # Healthcheck to ensure the server is running HEALTHCHECK --interval=30s --timeout=3s \ CMD wget -qO- http://localhost:80/ || exit 1 # Serve the static site with Python's http.server CMD ["python", "-m", "http.server", "80"]