# Build stage FROM python:3.9-alpine3.16 AS builder # Set environment variables to avoid interactive prompts ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 # Configure apk to use Alpine 3.16 repositories RUN echo "https://dl-cdn.alpinelinux.org/alpine/v3.16/main" > /etc/apk/repositories && \ echo "https://dl-cdn.alpinelinux.org/alpine/v3.16/community" >> /etc/apk/repositories # Update package index and install build dependencies RUN apk update && apk add --no-cache \ gcc \ musl-dev \ python3-dev \ libffi-dev \ openssl-dev \ make \ g++ # 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-alpine3.16 # 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"]