-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdockerfile
More file actions
114 lines (96 loc) · 3.65 KB
/
dockerfile
File metadata and controls
114 lines (96 loc) · 3.65 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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# -----------------------------
# Builder stage
# -----------------------------
FROM rocker/r-ver:4.4.1 AS builder
WORKDIR /project
# -----------------------------
# Environment variables
# -----------------------------
ENV DEBIAN_FRONTEND=noninteractive
ENV MAKEFLAGS="-j2"
ENV CONDA_DIR=/opt/conda
ENV PATH=$CONDA_DIR/bin:$PATH
ENV RENV_PATHS_CACHE=/project/renv/cache
# -----------------------------
# System dependencies (R + Python)
# -----------------------------
RUN apt-get update && apt-get install -y \
wget curl git \
libcurl4-openssl-dev libssl-dev libxml2-dev \
libpng-dev libhdf5-dev libmagick++-dev \
libblas-dev liblapack-dev gfortran \
pandoc libzip-dev libfreetype6-dev libtiff5-dev \
build-essential libgmp-dev libharfbuzz-dev libfribidi-dev \
libfontconfig1-dev pkg-config libgsl-dev libfftw3-dev\
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# -----------------------------
# Install renv
# -----------------------------
RUN R -e "install.packages('renv', repos='https://cloud.r-project.org')"
# -----------------------------
# Copy renv project files
# -----------------------------
RUN mkdir -p /project/renv
COPY renv.lock /project/renv.lock
COPY .Rprofile /project/.Rprofile
COPY renv/activate.R /project/renv/activate.R
COPY renv/settings.json /project/renv/settings.json
# -----------------------------
# Restore R packages (cached layers)
# -----------------------------
RUN R -e "renv::restore()"
# -----------------------------
# Install Miniconda
# -----------------------------
ENV CONDA_VERSION=25.9.1-3
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-py39_${CONDA_VERSION}-Linux-x86_64.sh -O /tmp/miniconda.sh \
&& /bin/bash /tmp/miniconda.sh -b -p $CONDA_DIR \
&& rm /tmp/miniconda.sh \
&& $CONDA_DIR/bin/conda clean --all --yes \
&& ln -s $CONDA_DIR/bin/conda /usr/local/bin/conda
# Accept TOS
RUN conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
RUN conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r
# -----------------------------
# Copy Conda environment and create env
# -----------------------------
COPY environment.yml /project/environment.yml
RUN conda env create -f /project/environment.yml \
&& conda clean --all --yes
# -----------------------------
# Copy source code
# -----------------------------
RUN git clone https://github.com/dimi-lab/STITCH.git /project/STITCH_src \
&& cd /project/STITCH_src \
&& cp -r assets/ docs/ scripts/ /project/ \
&& rm -rf /project/STITCH_src
# At this point, builder stage has:
# - /project/renv/cache
# - /opt/conda/envs/stitch_env
# - /project source code
# -----------------------------
# Final stage
# -----------------------------
FROM rocker/r-ver:4.4.1
WORKDIR /project
RUN apt-get update && apt-get install -y \
libcurl4-openssl-dev libssl-dev libxml2-dev \
libpng-dev libhdf5-dev libmagick++-dev \
libblas-dev liblapack-dev \
pandoc libzip-dev libfreetype6-dev libtiff5-dev \
libgmp-dev libharfbuzz-dev libfribidi-dev \
libfontconfig1-dev libgsl-dev libfftw3-dev\
&& apt-get clean && rm -rf /var/lib/apt/lists/*
RUN R -e "install.packages('renv', repos='https://cloud.r-project.org')"
# -----------------------------
# Copy only what we need from builder
# -----------------------------
COPY --from=builder /project /project
COPY --from=builder /opt/conda/ /opt/conda/
RUN rm -rf /opt/conda/pkgs/*
RUN ln -s /opt/conda/bin/conda /usr/local/bin/conda || true
ENV PATH=/opt/conda/envs/stitch_env/bin:/opt/conda/bin:$PATH
ENV RENV_PATHS_CACHE=/project/renv/cache
ENV RETICULATE_PYTHON=/opt/conda/envs/stitch_env/bin/python
WORKDIR /project
CMD ["/bin/bash"]