Files
at-container-registry/Dockerfile.appview
T

63 lines
2.5 KiB
Docker

FROM golang:1.25.2-trixie AS builder
RUN apt-get update && \
apt-get install -y --no-install-recommends sqlite3 libsqlite3-dev && \
rm -rf /var/lib/apt/lists/*
WORKDIR /build
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=1 go build \
-ldflags="-s -w" \
-tags sqlite_omit_load_extension \
-trimpath \
-o atcr-appview ./cmd/appview
# Collect minimal runtime dependencies
RUN mkdir -p /runtime-deps/lib64 /runtime-deps/lib/x86_64-linux-gnu && \
# Core glibc libraries (from ldd output)
cp /lib/x86_64-linux-gnu/libc.so.6 /runtime-deps/lib64/ && \
cp /lib/x86_64-linux-gnu/libresolv.so.2 /runtime-deps/lib64/ && \
cp /lib64/ld-linux-x86-64.so.2 /runtime-deps/lib64/ && \
# NSS (Name Service Switch) modules for DNS resolution
cp /lib/x86_64-linux-gnu/libnss_dns.so.2 /runtime-deps/lib/x86_64-linux-gnu/ && \
cp /lib/x86_64-linux-gnu/libnss_files.so.2 /runtime-deps/lib/x86_64-linux-gnu/ && \
# Create NSS config (tells glibc to check /etc/hosts then DNS)
echo "hosts: files dns" > /tmp/nsswitch.conf
# ==========================================
# Stage 2: Minimal FROM scratch runtime
# ==========================================
FROM scratch
# Copy minimal glibc runtime dependencies
COPY --from=builder /runtime-deps /
# Copy NSS configuration for DNS resolution
COPY --from=builder /tmp/nsswitch.conf /etc/nsswitch.conf
# Copy CA certificates for HTTPS (PDS, Jetstream, relay connections)
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
# Copy timezone data for timestamp formatting
COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo
# Copy optimized binary (SQLite embedded)
COPY --from=builder /build/atcr-appview /atcr-appview
# Expose ports
EXPOSE 5000
# OCI image annotations
LABEL org.opencontainers.image.title="ATCR AppView" \
org.opencontainers.image.description="ATProto Container Registry - OCI-compliant registry using AT Protocol for manifest storage" \
org.opencontainers.image.authors="ATCR Contributors" \
org.opencontainers.image.source="https://tangled.org/@evan.jarrett.net/at-container-registry" \
org.opencontainers.image.documentation="https://tangled.org/@evan.jarrett.net/at-container-registry" \
org.opencontainers.image.licenses="MIT" \
org.opencontainers.image.version="0.1.0" \
io.atcr.icon="https://imgs.blue/evan.jarrett.net/1TpTNrRelfloN2emuWZDrWmPT0o93bAjEnozjD6UPgoVV9m4"
ENTRYPOINT ["/atcr-appview"]
CMD ["serve"]