mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 14:02:21 -04:00
110 lines
No EOL
2.5 KiB
Docker
110 lines
No EOL
2.5 KiB
Docker
# This is a user-contributed Dockerfile. No official support is available.
|
|
|
|
ARG DEBIAN_FRONTEND="noninteractive"
|
|
|
|
FROM ubuntu:24.04 AS build
|
|
WORKDIR /opt/anki
|
|
ENV PYTHON_VERSION="3.13"
|
|
|
|
|
|
# System deps
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
curl \
|
|
git \
|
|
build-essential \
|
|
pkg-config \
|
|
libssl-dev \
|
|
libbz2-dev \
|
|
libreadline-dev \
|
|
libsqlite3-dev \
|
|
libffi-dev \
|
|
zlib1g-dev \
|
|
liblzma-dev \
|
|
ca-certificates \
|
|
ninja-build \
|
|
rsync \
|
|
libglib2.0-0 \
|
|
libgl1 \
|
|
libx11-6 \
|
|
libxext6 \
|
|
libxrender1 \
|
|
libxkbcommon0 \
|
|
libxkbcommon-x11-0 \
|
|
libxcb1 \
|
|
libxcb-render0 \
|
|
libxcb-shm0 \
|
|
libxcb-icccm4 \
|
|
libxcb-image0 \
|
|
libxcb-keysyms1 \
|
|
libxcb-randr0 \
|
|
libxcb-shape0 \
|
|
libxcb-xfixes0 \
|
|
libxcb-xinerama0 \
|
|
libxcb-xinput0 \
|
|
libsm6 \
|
|
libice6 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# install rust with rustup
|
|
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
|
ENV PATH="/root/.cargo/bin:${PATH}"
|
|
|
|
# Install uv and Python 3.13 with uv
|
|
RUN curl -LsSf https://astral.sh/uv/install.sh | sh \
|
|
&& ln -s /root/.local/bin/uv /usr/local/bin/uv
|
|
ENV PATH="/root/.local/bin:${PATH}"
|
|
|
|
RUN uv python install ${PYTHON_VERSION} --default
|
|
|
|
COPY . .
|
|
|
|
RUN ./tools/build
|
|
|
|
|
|
# Install pre-compiled Anki.
|
|
FROM python:3.13-slim AS installer
|
|
WORKDIR /opt/anki/
|
|
COPY --from=build /opt/anki/out/wheels/ wheels/
|
|
# Use virtual environment.
|
|
RUN python -m venv venv \
|
|
&& ./venv/bin/python -m pip install --no-cache-dir setuptools wheel \
|
|
&& ./venv/bin/python -m pip install --no-cache-dir /opt/anki/wheels/*.whl
|
|
|
|
|
|
# We use another build stage here so we don't include the wheels in the final image.
|
|
FROM python:3.13-slim AS final
|
|
COPY --from=installer /opt/anki/venv /opt/anki/venv
|
|
ENV PATH=/opt/anki/venv/bin:$PATH
|
|
# Install run-time dependencies.
|
|
RUN apt-get update \
|
|
&& apt-get install --yes --no-install-recommends \
|
|
libasound2 \
|
|
libdbus-1-3 \
|
|
libfontconfig1 \
|
|
libfreetype6 \
|
|
libgl1 \
|
|
libglib2.0-0 \
|
|
libnss3 \
|
|
libxcb-icccm4 \
|
|
libxcb-image0 \
|
|
libxcb-keysyms1 \
|
|
libxcb-randr0 \
|
|
libxcb-render-util0 \
|
|
libxcb-shape0 \
|
|
libxcb-xinerama0 \
|
|
libxcb-xkb1 \
|
|
libxcomposite1 \
|
|
libxcursor1 \
|
|
libxi6 \
|
|
libxkbcommon0 \
|
|
libxkbcommon-x11-0 \
|
|
libxrandr2 \
|
|
libxrender1 \
|
|
libxtst6 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Add non-root user.
|
|
RUN useradd --create-home anki
|
|
USER anki
|
|
WORKDIR /work
|
|
ENTRYPOINT ["/opt/anki/venv/bin/anki"] |