-
Notifications
You must be signed in to change notification settings - Fork 530
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Consolidated apt-get install commands: This reduces the image size by combining installations into a single layer. Removed unnecessary cache files: After installations, temporary files and lists are removed to reduce the image size. Multistage build optimization: Using only essential layers and tools from the base stage.
- Loading branch information
1 parent
eedbac5
commit b044288
Showing
1 changed file
with
29 additions
and
13 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,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" ] |