-
Notifications
You must be signed in to change notification settings - Fork 33
Expand file tree
/
Copy pathDockerfile
More file actions
90 lines (74 loc) · 3.18 KB
/
Dockerfile
File metadata and controls
90 lines (74 loc) · 3.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# Stage 1: Build environment
FROM quay.io/jupyter/minimal-notebook:latest AS builder
# Define build argument for PyTorch variant (cpu or cuda)
ARG PYTORCH_VARIANT=cpu
# Switch to root user to install additional dependencies
USER root
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
gcc \
g++ \
libffi-dev \
libgl1 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Switch back to the default notebook user
USER ${NB_UID}
# Set up the Conda environment
COPY docker/environment.yml /tmp/environment.yml
RUN mamba env update -n base -f /tmp/environment.yml && \
# Force remove any existing PyTorch installations first
pip uninstall -y torch torchvision && \
# Install PyTorch packages without cache - conditionally based on variant
if [ "$PYTORCH_VARIANT" = "cpu" ]; then \
echo "Installing CPU-only PyTorch" && \
pip install --no-cache-dir --force-reinstall torch torchvision --index-url https://download.pytorch.org/whl/cpu; \
else \
echo "Installing CUDA-enabled PyTorch" && \
pip install --no-cache-dir --force-reinstall torch torchvision; \
fi && \
# Clean up all package caches to reduce image size
mamba clean --all -f -y && \
# Remove pip cache
rm -rf ~/.cache/pip && \
fix-permissions "${CONDA_DIR}" && \
fix-permissions "/home/${NB_USER}"
# Stage 2: Runtime environment - creates a lighter final image
FROM quay.io/jupyter/minimal-notebook:latest
# Inherit build argument for image labeling
ARG PYTORCH_VARIANT=cpu
# Metadata labels
LABEL org.opencontainers.image.title="Python Tutorial"
LABEL org.opencontainers.image.description="A containerized Python tutorial environment with Jupyter Lab."
LABEL org.opencontainers.image.authors="Empa Scientific IT <scientificit@empa.ch>"
LABEL org.opencontainers.image.url="https://github.com/empa-scientific-it/python-tutorial"
LABEL org.opencontainers.image.source="https://github.com/empa-scientific-it/python-tutorial"
LABEL org.opencontainers.image.version="1.0.0"
LABEL org.opencontainers.image.licenses="MIT"
LABEL org.opencontainers.image.variant="pytorch-${PYTORCH_VARIANT}"
# Switch to root user to install minimal dependencies
USER root
RUN apt-get update && \
apt-get install -y --no-install-recommends \
libgl1 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# System-wide Jupyter Server config
COPY docker/jupyter_server_config.py /opt/conda/etc/jupyter/
# Jupyter Lab settings
RUN mkdir -p /opt/conda/share/jupyter/lab/settings
COPY docker/overrides.json /opt/conda/share/jupyter/lab/settings/
# System-wide IPython profile config
RUN mkdir -p /opt/conda/etc/ipython
COPY docker/ipython_config.py /opt/conda/etc/ipython/
# Switch back to the default notebook user
USER ${NB_UID}
# Copy the conda environment from the builder stage
COPY --from=builder ${CONDA_DIR} ${CONDA_DIR}
# Copy home directory with configurations
COPY --from=builder --chown=${NB_UID}:${NB_GID} /home/${NB_USER} /home/${NB_USER}
# Set the working directory to user's home (repository will be cloned here by Renku)
WORKDIR /home/${NB_USER}
# Use the default ENTRYPOINT from the base image to start Jupyter Lab
ENTRYPOINT ["tini", "-g", "--", "start.sh"]