CI / Build and push docker image (push) Successful in 2m33s
Split the Dockerfile into a builder stage (apk + pip cache mounts) and a slim runtime stage, mirroring reimpasto. apk and pip package caches now persist across builds and never land in the image layers.
53 lines
1.6 KiB
Docker
53 lines
1.6 KiB
Docker
# syntax=docker/dockerfile:1
|
|
# Multi-stage production build for the kaya-rbcs app on the Kaya framework.
|
|
# Base: alpine:3.24 (python3 = 3.14). Deps are installed into a venv in the
|
|
# builder; apk and pip caches use BuildKit cache mounts so they persist across
|
|
# builds and never land in the image layers. Requires BuildKit (default for
|
|
# `docker build` / `docker buildx` on modern daemons).
|
|
|
|
# --- Builder ---------------------------------------------------------------
|
|
FROM alpine:3.24 AS builder
|
|
|
|
RUN --mount=type=cache,target=/var/cache/apk \
|
|
apk add python3
|
|
|
|
WORKDIR /build
|
|
|
|
COPY requirements.txt ./
|
|
|
|
RUN --mount=type=cache,target=/root/.cache/pip \
|
|
python3 -m venv /opt/venv \
|
|
&& /opt/venv/bin/pip install -r requirements.txt
|
|
|
|
COPY pyproject.toml README.md ./
|
|
COPY src ./src
|
|
|
|
RUN --mount=type=cache,target=/root/.cache/pip \
|
|
/opt/venv/bin/pip install --no-deps .
|
|
|
|
# --- Runtime ---------------------------------------------------------------
|
|
FROM alpine:3.24
|
|
|
|
RUN --mount=type=cache,target=/var/cache/apk \
|
|
apk add python3 ca-certificates tzdata \
|
|
&& addgroup -S rbcs && adduser -S -G rbcs rbcs
|
|
|
|
COPY --from=builder /opt/venv /opt/venv
|
|
|
|
ENV PATH="/opt/venv/bin:${PATH}" \
|
|
PYTHONUNBUFFERED=1 \
|
|
PYTHONDONTWRITEBYTECODE=1 \
|
|
RBCS_HOST=0.0.0.0 \
|
|
RBCS_PORT=8080 \
|
|
RBCS_MEMCACHE_HOST=memcached \
|
|
RBCS_MEMCACHE_PORT=11211
|
|
|
|
USER rbcs
|
|
|
|
EXPOSE 8080
|
|
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
|
|
CMD python3 -c "import socket, os; socket.create_connection(('127.0.0.1', int(os.environ['RBCS_PORT'])), timeout=3).close()"
|
|
|
|
ENTRYPOINT ["rbcs-server"]
|