diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..72a6ca2 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,53 @@ +# .dockerignore file for the project + +# Python specific +__pycache__/ +*.pyc +*.pyo +.pytest_cache/ +.coverage + +# Development artifacts +.idea/ +.vscode/ +*.swp +*.swo +dist/ +build/ +out/ + +# Test files +test/ +tests/ +*_test.go + +# Version control +.git/ +.gitignore + +# Environment and secrets +.env* +*.env +*.pem +*.key +*.crt +config.local.* +*.local.yml + +# Project-specific patterns +docs/ +*.md +README* +Dockerfile* +docker-compose* +tmp/ +temp/ +*.tmp +.local/ +local/ + +# Exclude specific files to include in the image +!src/ +!pyproject.toml + +# End of .dockerignore \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d6fc834 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +# Use a Python image with uv pre-installed +FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS uv + +# Install the project into `/app` +WORKDIR /app + +# Enable bytecode compilation +ENV UV_COMPILE_BYTECODE=1 + +# Copy from the cache instead of linking since it's a mounted volume +ENV UV_LINK_MODE=copy + +# Install the project's dependencies using the lockfile and settings +RUN --mount=type=cache,target=/root/.cache/uv \ + --mount=type=bind,source=uv.lock,target=uv.lock \ + --mount=type=bind,source=pyproject.toml,target=pyproject.toml \ + uv sync --frozen --no-install-project --no-dev --no-editable + +# Then, add the rest of the project source code and install it +# Installing separately from its dependencies allows optimal layer caching +COPY . /app +RUN --mount=type=cache,target=/root/.cache/uv \ + uv sync --frozen --no-dev --no-editable + +FROM python:3.12-slim-bookworm + +RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +COPY --from=uv /root/.local /root/.local +COPY --from=uv /app /app +COPY --from=uv --chown=app:app /app/.venv /app/.venv + +# Place executables in the environment at the front of the path +ENV PATH="/app/.venv/bin:$PATH" + +ENTRYPOINT ["python", "/app/src/mcp_server_box.py"] \ No newline at end of file