Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Dockerfile #1056

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 29 additions & 13 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,27 +1,43 @@
FROM python:3.11 as requirements-stage
# First stage for dependencies
FROM python:3.11-slim-bookworm AS base-stage
WORKDIR /app

# Install Poetry and export dependencies to requirements.txt in one layer
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
&& curl -sSL https://install.python-poetry.org | python3 - \
&& apt-get purge -y --auto-remove curl \
&& rm -rf /var/lib/apt/lists/* \
&& ln -s /root/.local/bin/poetry /usr/local/bin/poetry

WORKDIR /tmp
RUN pip install poetry
COPY ./pyproject.toml /tmp/pyproject.toml
COPY ./poetry.lock /tmp/poetry.lock
# Copy dependency files first to leverage Docker cache
COPY ./pyproject.toml ./poetry.lock ./
RUN poetry export -f requirements.txt --output requirements.txt --without-hashes

FROM python:3.11-slim-bookworm
# Slim stage for final image
FROM python:3.11-slim-bookworm AS final-stage
WORKDIR /app
COPY --from=requirements-stage /tmp/requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir --upgrade -r requirements.txt
RUN playwright install-deps
RUN playwright install
RUN apt-get install -y xauth x11-apps netpbm && apt-get clean

COPY . /app
# Copy and install dependencies in one layer to reduce image size
COPY --from=base-stage /app/requirements.txt /app/requirements.txt
RUN apt-get update && apt-get install -y --no-install-recommends \
xauth x11-apps netpbm \
&& pip install --no-cache-dir -r requirements.txt \
&& apt-get clean && rm -rf /var/lib/apt/lists/*

# Install Playwright dependencies and browser binaries in a single layer
RUN pip install --no-cache-dir playwright && playwright install-deps && playwright install

# Copy the application code and set environment variables
COPY . /app
ENV PYTHONPATH="/app:$PYTHONPATH"
ENV VIDEO_PATH=/data/videos
ENV HAR_PATH=/data/har
ENV ARTIFACT_STORAGE_PATH=/data/artifacts

# Copy and set entrypoint script permissions in a single layer
COPY ./entrypoint-skyvern.sh /app/entrypoint-skyvern.sh
RUN chmod +x /app/entrypoint-skyvern.sh

CMD [ "/bin/bash", "/app/entrypoint-skyvern.sh" ]
# Set the entrypoint
ENTRYPOINT [ "/app/entrypoint-skyvern.sh" ]