kraken Docker & Self-Hosted Deployment

GitHub

P2P Docker registry capable of distributing TBs of data in seconds

1. Pull Image (DOCKERHUB) docker pull uber/kraken:latest
2. Docker Run (1-Click Launch) docker run -d --name kraken --restart always uber/kraken:latest
3. Podman Run podman run -d --name kraken --restart always uber/kraken:latest
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/uber/kraken:latest
5. ORAS Pull (OCI Artifact) oras pull uber/kraken:latest
docker/proxy/Dockerfile
FROM debian:12
LABEL org.opencontainers.image.source=https://github.com/uber/kraken
LABEL org.opencontainers.image.licenses=Apache-2.0
LABEL org.opencontainers.image.description="The Kraken proxy component receives image layer uploads from a Docker client. The component sends each layer to the origin instance that owns it. The component sends tag uploads to the build-index component. Production deployments run this component."

# Fix repository configuration for Debian 12 (bookworm) with multiple mirrors and better retry logic
RUN echo 'Acquire::Check-Valid-Until "false";' > /etc/apt/apt.conf.d/99no-check-valid-until && \
    echo 'Acquire::AllowInsecureRepositories "true";' >> /etc/apt/apt.conf.d/99no-check-valid-until && \
    echo 'Acquire::Retries "10";' >> /etc/apt/apt.conf.d/99no-check-valid-until && \
    echo 'Acquire::http::Timeout "60";' >> /etc/apt/apt.conf.d/99no-check-valid-until

RUN apt-get clean \
 && rm -rf /var/lib/apt/lists/* \
 && \
   ( \
     unset http_proxy https_proxy no_proxy && \
     apt-get update --allow-releaseinfo-change -o Acquire::Retries=10 -o Acquire::http::No-Cache=true -o Acquire::http::timeout=60 -o Acquire::ForceIPv4=true \
   ) \
 && \
   ( \
     unset http_proxy https_proxy no_proxy && \
     apt-get install -y --no-install-recommends --fix-missing --allow-unauthenticated \
       curl \
       nginx \
   ) \
 && rm -rf /var/lib/apt/lists/*

RUN mkdir -p -m 777 /var/log/kraken/kraken-proxy
RUN mkdir -p -m 777 /var/cache/kraken/kraken-proxy
RUN mkdir -p -m 777 /var/run/kraken

ARG USERNAME="root"
ARG USERID="0"
RUN if [ ${USERID} != "0" ]; then useradd --uid ${USERID} ${USERNAME}; fi

COPY ./docker/setup_nginx.sh /tmp/setup_nginx.sh
RUN /tmp/setup_nginx.sh ${USERNAME}

COPY ./proxy/proxy /usr/bin/kraken-proxy
COPY ./config /etc/kraken/config
COPY ./nginx/config /etc/kraken/nginx/config
COPY ./test/tls /etc/kraken/tls

RUN chmod +x /usr/bin/kraken-proxy

USER ${USERNAME}

WORKDIR /etc/kraken