From 1e8ce52d9823fc994c622b8e2461ec0b95b06609 Mon Sep 17 00:00:00 2001 From: Debanjum Singh Solanky Date: Sun, 29 Sep 2024 03:52:11 -0700 Subject: [PATCH] Reduce size of Khoj Docker images by removing layers and caches - Align Dockerfile and prod.Dockerfile code - Reduce Docker image size by 25% by reducing Docker layers and removing package caches --- Dockerfile | 28 ++++++++++++++++------------ prod.Dockerfile | 36 ++++++++++++++++++++++-------------- 2 files changed, 38 insertions(+), 26 deletions(-) diff --git a/Dockerfile b/Dockerfile index b3101b10..73328c49 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,19 +3,23 @@ FROM ubuntu:jammy LABEL homepage="https://khoj.dev" LABEL repository="https://github.com/khoj-ai/khoj" LABEL org.opencontainers.image.source="https://github.com/khoj-ai/khoj" +LABEL org.opencontainers.image.description="Your second brain, containerized for personal, local deployment." # Install System Dependencies -RUN apt update -y && apt -y install python3-pip swig curl - -# Install Node.js and Yarn -RUN curl -sL https://deb.nodesource.com/setup_20.x | bash - -RUN apt -y install nodejs -RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - -RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list -RUN apt update && apt -y install yarn - -# Install RapidOCR dependencies -RUN apt -y install libgl1 libgl1-mesa-glx libglib2.0-0 +RUN apt update -y && apt -y install \ + python3-pip \ + swig \ + curl \ + # Required by RapidOCR + libgl1 \ + libglx-mesa0 \ + libglib2.0-0 && \ + # Required by Next.js Web app + curl -sL https://deb.nodesource.com/setup_20.x | bash - && \ + curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ + echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ + apt update -y && apt -y --no-install-recommends install nodejs yarn && \ + apt clean && rm -rf /var/lib/apt/lists/* # Install Application WORKDIR /app @@ -33,7 +37,7 @@ ENV PYTHONPATH=/app/src:$PYTHONPATH # Go to the directory src/interface/web and export the built Next.js assets WORKDIR /app/src/interface/web -RUN bash -c "yarn cache clean && yarn install --verbose && yarn ciexport" +RUN bash -c "yarn install --frozen-lockfile --verbose && yarn ciexport && yarn cache clean" WORKDIR /app # Run the Application diff --git a/prod.Dockerfile b/prod.Dockerfile index d42f8779..d955f155 100644 --- a/prod.Dockerfile +++ b/prod.Dockerfile @@ -1,25 +1,33 @@ +# syntax=docker/dockerfile:1 FROM ubuntu:jammy - +LABEL homepage="https://khoj.dev" +LABEL repository="https://github.com/khoj-ai/khoj" LABEL org.opencontainers.image.source="https://github.com/khoj-ai/khoj" +LABEL org.opencontainers.image.description="Your second brain, containerized for multi-user, cloud deployment" # Install System Dependencies -RUN apt update -y && apt -y install python3-pip libsqlite3-0 ffmpeg libsm6 libxext6 swig curl - -# Install Node.js and Yarn -RUN curl -sL https://deb.nodesource.com/setup_20.x | bash - -RUN apt -y install nodejs -RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - -RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list -RUN apt update && apt -y install yarn - -WORKDIR /app +RUN apt update -y && apt -y install \ + python3-pip \ + libsqlite3-0 \ + ffmpeg \ + libsm6 \ + libxext6 \ + swig \ + curl && \ + # Required by Next.js Web app + curl -sL https://deb.nodesource.com/setup_20.x | bash - && \ + curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ + echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ + apt update -y && apt -y --no-install-recommends install nodejs yarn && \ + apt clean && rm -rf /var/lib/apt/lists/* # Install Application +WORKDIR /app COPY pyproject.toml . COPY README.md . ARG VERSION=0.0.0 RUN sed -i "s/dynamic = \\[\"version\"\\]/version = \"$VERSION\"/" pyproject.toml && \ - TMPDIR=/home/cache/ pip install --cache-dir=/home/cache/ -e .[prod] + pip install --no-cache-dir -e .[prod] # Copy Source Code COPY . . @@ -29,7 +37,7 @@ ENV PYTHONPATH=/app/src:$PYTHONPATH # Go to the directory src/interface/web and export the built Next.js assets WORKDIR /app/src/interface/web -RUN bash -c "yarn cache clean && yarn install --verbose && yarn ciexport" +RUN bash -c "yarn install --frozen-lockfile --verbose && yarn ciexport && yarn cache clean" WORKDIR /app # Run the Application @@ -37,4 +45,4 @@ WORKDIR /app # but these should be passed in through the docker-compose.yml file. ARG PORT EXPOSE ${PORT} -ENTRYPOINT [ "gunicorn", "-c", "gunicorn-config.py", "src.khoj.main:app" ] +ENTRYPOINT ["gunicorn", "-c", "gunicorn-config.py", "src.khoj.main:app"]