-
Notifications
You must be signed in to change notification settings - Fork 789
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e4f005b
commit e4a834d
Showing
1 changed file
with
13 additions
and
29 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,43 +1,27 @@ | ||
# 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 | ||
FROM python:3.11 as requirements-stage | ||
|
||
# Copy dependency files first to leverage Docker cache | ||
COPY ./pyproject.toml ./poetry.lock ./ | ||
WORKDIR /tmp | ||
RUN pip install poetry | ||
COPY ./pyproject.toml /tmp/pyproject.toml | ||
COPY ./poetry.lock /tmp/poetry.lock | ||
RUN poetry export -f requirements.txt --output requirements.txt --without-hashes | ||
|
||
# Slim stage for final image | ||
FROM python:3.11-slim-bookworm AS final-stage | ||
FROM python:3.11-slim-bookworm | ||
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 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 | ||
|
||
# Set the entrypoint | ||
ENTRYPOINT [ "/app/entrypoint-skyvern.sh" ] | ||
CMD [ "/bin/bash", "/app/entrypoint-skyvern.sh" ] |