From e469da706c1af968b8621bfc4cbbd69358c16156 Mon Sep 17 00:00:00 2001 From: "k.eaven" Date: Wed, 10 Sep 2025 08:13:08 -0700 Subject: [PATCH] Optimize runner Docker image building --- .dockerignore | 14 +++++++++++ .gitea/workflows/docker-build.yml | 20 +++------------ dockerfile | 42 ++++++++++++++++++------------- 3 files changed, 42 insertions(+), 34 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..2ab8711 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,14 @@ +.gitea +.gitignore +.env +__pycache__ +md_images +*.pyc +*.pyo +*.pyd +*.ini +*.sample +LICENSE +dockerfile +.dockerignore +README.md \ No newline at end of file diff --git a/.gitea/workflows/docker-build.yml b/.gitea/workflows/docker-build.yml index c68d16d..0e99d24 100644 --- a/.gitea/workflows/docker-build.yml +++ b/.gitea/workflows/docker-build.yml @@ -20,15 +20,6 @@ jobs: platforms: linux/amd64,linux/arm64 driver-opts: | image=moby/buildkit:latest - network=host - - - name: Cache Docker layers - uses: actions/cache@v3 - with: - path: /tmp/.buildx-cache - key: ${{ runner.os }}-buildx-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-buildx- - name: Log in to registry uses: docker/login-action@v2 @@ -43,13 +34,8 @@ jobs: context: . platforms: linux/amd64,linux/arm64 push: true - cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max + cache-from: type=registry,ref=${{ vars.REGISTRY }}/${{ github.repository_owner }}/${{ vars.IMAGE_NAME }}:cache + cache-to: type=registry,ref=${{ vars.REGISTRY }}/${{ github.repository_owner }}/${{ vars.IMAGE_NAME }}:cache,mode=max tags: | ${{ vars.REGISTRY }}/${{ github.repository_owner }}/${{ vars.IMAGE_NAME }}:latest - ${{ vars.REGISTRY }}/${{ github.repository_owner }}/${{ vars.IMAGE_NAME }}:${{ github.sha }} - - - name: Move cache - run: | - rm -rf /tmp/.buildx-cache - mv /tmp/.buildx-cache-new /tmp/.buildx-cache \ No newline at end of file + ${{ vars.REGISTRY }}/${{ github.repository_owner }}/${{ vars.IMAGE_NAME }}:${{ github.sha }} \ No newline at end of file diff --git a/dockerfile b/dockerfile index f179917..9c79aaf 100644 --- a/dockerfile +++ b/dockerfile @@ -1,23 +1,36 @@ # Use official Python image -FROM python:3.11-slim +FROM python:3.11-slim as builder -# Set working directory -WORKDIR /app - -# Install dependencies +# Install system dependencies for building RUN apt-get update && apt-get install -y \ gcc \ python3-dev \ && rm -rf /var/lib/apt/lists/* -# Install tini for better signal handling in container -RUN apt-get update && apt-get install -y tini +# Create virtual environment +RUN python -m venv /opt/venv +ENV PATH="/opt/venv/bin:$PATH" # Copy requirements first to leverage Docker cache COPY requirements.txt . -# Install Python dependencies -RUN pip install --no-cache-dir -r requirements.txt +# Install Python dependencies with cache dir +RUN --mount=type=cache,target=/root/.cache/pip \ + pip install --no-cache-dir -r requirements.txt + +# Final stage +FROM python:3.11-slim + +# Set working directory +WORKDIR /app + +# Install tini for better signal handling in container +RUN apt-get update && apt-get install -y tini && \ + rm -rf /var/lib/apt/lists/* + +# Copy virtual environment from builder +COPY --from=builder /opt/venv /opt/venv +ENV PATH="/opt/venv/bin:$PATH" # Create a non-root user RUN groupadd -r bot && useradd -r -g bot bot @@ -26,14 +39,9 @@ RUN groupadd -r bot && useradd -r -g bot bot COPY --chown=bot:bot . . # Create directories for persistent storage and modify permissions -RUN chown -R bot:bot /app && \ - chmod -R 777 /app -RUN mkdir -p logs && \ - chown -R bot:bot logs && \ - chmod -R 777 logs && \ - mkdir -p embed && \ - chown -R bot:bot embed && \ - chmod -R 777 embed +RUN mkdir -p logs embed && \ + chown -R bot:bot /app logs embed && \ + chmod -R 777 /app logs embed # Switch to non root user USER bot