|
1 | 1 | FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim |
2 | 2 |
|
| 3 | +# Paths |
| 4 | +ENV KERNELS_PATH=/home/notebook/kernels |
| 5 | +ENV WORKDIR=/home/notebook/app |
| 6 | + |
3 | 7 | # Create notebook user with configurable UID/GID |
| 8 | +# Note hat GID 20 already exists in docker image |
4 | 9 | ARG DOCKER_UID=1000 |
5 | | - |
6 | | -# GID 20 already exists in docker image |
7 | 10 | RUN useradd -m -u ${DOCKER_UID} -s /bin/bash notebook |
8 | 11 |
|
9 | 12 | # Switch to the notebook user |
10 | 13 | USER notebook |
11 | 14 |
|
12 | 15 | # Set working directory |
13 | | -WORKDIR /home/notebook/app |
| 16 | +WORKDIR ${WORKDIR} |
14 | 17 |
|
15 | | -# Create directory structure for app and thematic kernels |
16 | | -RUN mkdir -p /home/notebook/app && \ |
17 | | - mkdir -p /home/notebook/kernels/nlp |
| 18 | +# Create directory for thematic kernels |
| 19 | +RUN mkdir -p "${KERNELS_PATH}" |
18 | 20 |
|
19 | 21 | # Copy dependency files |
20 | | -COPY pyproject.toml uv.lock ./ |
| 22 | +COPY pyproject.toml uv.lock list-kernels.py ./ |
21 | 23 |
|
22 | 24 | # Install Python dependencies |
23 | 25 | RUN uv sync --frozen |
24 | 26 |
|
25 | | -# Create NLP kernel |
26 | | -RUN cd /home/notebook/kernels/nlp && \ |
27 | | - uv init --name csplab-nlp && \ |
28 | | - uv add pandas numpy matplotlib ipykernel spacy transformers |
29 | | - |
30 | | -# Now create all kernels as the notebook user with specific environment variables |
| 27 | +# Create the base kernel |
31 | 28 | RUN uv run \ |
32 | 29 | ipython kernel install \ |
33 | 30 | --user \ |
34 | 31 | --name=csplab-base \ |
35 | 32 | --display-name="CSPLab Base (pandas, numpy, matplotlib)" |
36 | 33 |
|
37 | | -RUN cd /home/notebook/kernels/nlp && \ |
38 | | - uv run \ |
39 | | - ipython kernel install \ |
40 | | - --user \ |
41 | | - --env VIRTUAL_ENV $(pwd)/.venv \ |
42 | | - --name=csplab-nlp \ |
43 | | - --display-name="CSPLab NLP (spacy, transformers)" |
| 34 | +# Now create all specific kernels |
| 35 | +RUN for kernel in $(python list-kernels.py); do \ |
| 36 | + KERNEL_PATH="${KERNELS_PATH}/${kernel}"; \ |
| 37 | + VIRTUAL_ENV="${KERNEL_PATH}/.venv"; \ |
| 38 | + mkdir -p "${KERNEL_PATH}" && \ |
| 39 | + cp pyproject.toml uv.lock "${KERNEL_PATH}" && \ |
| 40 | + cd "${KERNEL_PATH}" && \ |
| 41 | + uv sync --frozen --only-group "${kernel}" && \ |
| 42 | + VIRTUAL_ENV="${VIRTUAL_ENV}" uv run \ |
| 43 | + ipython kernel install \ |
| 44 | + --user \ |
| 45 | + --env VIRTUAL_ENV "${VIRTUAL_ENV}" \ |
| 46 | + --name="csplab-${kernel}" \ |
| 47 | + --display-name="CSPLab ${kernel}"; \ |
| 48 | + done |
44 | 49 |
|
45 | 50 | CMD [ \ |
46 | 51 | "uv", \ |
|
0 commit comments