# rpki-explorer all-in-one image: # - rpki_query_service (watch mode) + rpki_query_indexer # - nginx serving the explorer SPA and proxying /api/v1/ to the query service # # Build context must be the repository root (rpki_2/rpki): # docker build -f deploy/rpki-explorer/Dockerfile -t rpki-explorer: . # # Note: no `# syntax=` directive on purpose — the default images below are all # expected to be present locally, and pulling the dockerfile frontend from # docker.io may not be possible on offline build hosts. ARG RUST_BUILDER_IMAGE=rust:1-bookworm ARG NODE_BUILDER_IMAGE=node:slim ARG RUNTIME_IMAGE=nginx:1.27-bookworm FROM ${RUST_BUILDER_IMAGE} AS rust-builder WORKDIR /src RUN apt-get update \ && apt-get install -y --no-install-recommends \ build-essential \ ca-certificates \ clang \ cmake \ git \ libclang-dev \ make \ perl \ pkg-config \ python3 \ && rm -rf /var/lib/apt/lists/* COPY . . RUN --mount=type=cache,target=/usr/local/cargo/registry \ --mount=type=cache,target=/usr/local/cargo/git \ --mount=type=cache,target=/src/target \ cargo build --release --bin rpki_query_service --bin rpki_query_indexer \ && cp target/release/rpki_query_service target/release/rpki_query_indexer /usr/local/bin/ FROM ${NODE_BUILDER_IMAGE} AS ui-builder WORKDIR /ui COPY ui/rpki-explorer/package.json ui/rpki-explorer/package-lock.json ./ RUN npm ci --no-audit --no-fund COPY ui/rpki-explorer/ ./ RUN npm run build FROM ${RUNTIME_IMAGE} ARG GIT_REV=unknown LABEL org.opencontainers.image.title="rpki-explorer" \ org.opencontainers.image.revision="${GIT_REV}" COPY --from=rust-builder /usr/local/bin/rpki_query_service /usr/local/bin/rpki_query_service COPY --from=rust-builder /usr/local/bin/rpki_query_indexer /usr/local/bin/rpki_query_indexer COPY --from=ui-builder /ui/dist /usr/share/nginx/html COPY deploy/rpki-explorer/nginx.conf /etc/nginx/conf.d/default.conf COPY deploy/rpki-explorer/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh && mkdir -p /data EXPOSE 8080 ENTRYPOINT ["/entrypoint.sh"]