annotate Dockerfile @ 4:ecf96ad08611 draft

planemo upload commit 26a6ad9e9ae7fdb967832a65f5173ea347da7f6c
author galaxytrakr
date Tue, 15 Sep 2026 12:02:36 +0000
parents dd206296acbf
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
1 # =============================================================
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
2 # Dockerfile for mitokmer2 (compatible with Galaxy/AWS Batch)
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
3 # =============================================================
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
4
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
5 # ---------- Build Stage ----------
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
6 FROM ubuntu:focal AS build
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
7
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
8 ARG DEBIAN_FRONTEND=noninteractive
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
9 ARG PYTHON_VER="3.8"
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
10
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
11 WORKDIR /workspace
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
12
4
ecf96ad08611 planemo upload commit 26a6ad9e9ae7fdb967832a65f5173ea347da7f6c
galaxytrakr
parents: 2
diff changeset
13
0
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
14 # Build dependencies: compiler, zlib dev headers, git, Python
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
15 RUN apt-get update && apt-get install -y --no-install-recommends \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
16 build-essential \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
17 g++ \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
18 git \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
19 wget \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
20 zlib1g-dev \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
21 ca-certificates \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
22 python${PYTHON_VER} \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
23 python${PYTHON_VER}-dev \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
24 python${PYTHON_VER}-venv \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
25 && rm -rf /var/lib/apt/lists/*
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
26
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
27 # Create Python virtual environment using --copies so symlinks
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
28 # do not break when the venv is copied to the runtime stage
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
29 RUN python${PYTHON_VER} -m venv --copies /opt/venv
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
30 ENV PATH="/opt/venv/bin:${PATH}"
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
31
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
32 # Install Python dependencies
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
33 RUN pip install --no-cache-dir -U pip && \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
34 pip install --no-cache-dir pandas
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
35
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
36 # Clone mitokmer2 source code from GitHub
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
37 RUN git clone https://github.com/mmammel8/mitokmer2.git /opt/mitokmer2
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
38
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
39 WORKDIR /opt/mitokmer2
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
40
2
dd206296acbf planemo upload commit 83cba09882dc583100b39b69b41cf791e4efb55a
galaxytrakr
parents: 0
diff changeset
41 # Compile kmer_read_1.cpp -> kmerread7
dd206296acbf planemo upload commit 83cba09882dc583100b39b69b41cf791e4efb55a
galaxytrakr
parents: 0
diff changeset
42 # kmer_read_m7.py calls ./kmerread7 as a subprocess
dd206296acbf planemo upload commit 83cba09882dc583100b39b69b41cf791e4efb55a
galaxytrakr
parents: 0
diff changeset
43 RUN g++ -O3 kmer_read_1.cpp -o kmerread7 -lz && \
dd206296acbf planemo upload commit 83cba09882dc583100b39b69b41cf791e4efb55a
galaxytrakr
parents: 0
diff changeset
44 chmod +x kmerread7
0
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
45
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
46 # Install any Python requirements declared in the repo
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
47 RUN if [ -f requirements.txt ]; then \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
48 pip install --no-cache-dir -r requirements.txt; \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
49 fi
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
50
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
51
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
52 # ---------- Runtime Stage ----------
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
53 FROM ubuntu:focal AS runtime
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
54
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
55 ARG DEBIAN_FRONTEND=noninteractive
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
56
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
57 # Lean runtime: zlib shared library + Python runtime only
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
58 RUN apt-get update && apt-get install -y --no-install-recommends \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
59 zlib1g \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
60 libbz2-1.0 \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
61 ca-certificates \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
62 python3.8 \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
63 python3.8-venv \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
64 python3.8-distutils \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
65 && rm -rf /var/lib/apt/lists/*
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
66
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
67 # Copy compiled binary from build stage
2
dd206296acbf planemo upload commit 83cba09882dc583100b39b69b41cf791e4efb55a
galaxytrakr
parents: 0
diff changeset
68 # kmerread7 is called by kmer_read_m7.py as ./kmerread7 so it
dd206296acbf planemo upload commit 83cba09882dc583100b39b69b41cf791e4efb55a
galaxytrakr
parents: 0
diff changeset
69 # must be in the working directory at runtime; place it in both
dd206296acbf planemo upload commit 83cba09882dc583100b39b69b41cf791e4efb55a
galaxytrakr
parents: 0
diff changeset
70 # /usr/local/bin (for PATH) and /opt/mitokmer2 (for relative invocation)
dd206296acbf planemo upload commit 83cba09882dc583100b39b69b41cf791e4efb55a
galaxytrakr
parents: 0
diff changeset
71 COPY --from=build /opt/mitokmer2/kmerread7 /usr/local/bin/kmerread7
dd206296acbf planemo upload commit 83cba09882dc583100b39b69b41cf791e4efb55a
galaxytrakr
parents: 0
diff changeset
72 COPY --from=build /opt/mitokmer2/kmerread7 /opt/mitokmer2/kmerread7
0
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
73
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
74 # Copy Python scripts and supporting files from build stage
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
75 COPY --from=build /opt/mitokmer2 /opt/mitokmer2
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
76
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
77 # Copy Python virtual environment from build stage
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
78 COPY --from=build /opt/venv /opt/venv
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
79
2
dd206296acbf planemo upload commit 83cba09882dc583100b39b69b41cf791e4efb55a
galaxytrakr
parents: 0
diff changeset
80 # Refresh the dynamic linker cache
0
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
81 RUN ldconfig || true
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
82
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
83 # Ensure all users (including arbitrary Galaxy UIDs) can
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
84 # read and execute binaries, scripts, and the venv
2
dd206296acbf planemo upload commit 83cba09882dc583100b39b69b41cf791e4efb55a
galaxytrakr
parents: 0
diff changeset
85 RUN chmod a+rx /usr/local/bin/kmerread7 \
dd206296acbf planemo upload commit 83cba09882dc583100b39b69b41cf791e4efb55a
galaxytrakr
parents: 0
diff changeset
86 /opt/mitokmer2/kmerread7 && \
0
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
87 chmod -R a+rX /opt/mitokmer2 && \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
88 chmod -R a+rX /opt/venv
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
89
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
90 # Runtime environment
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
91 ENV PATH="/opt/venv/bin:/opt/mitokmer2:/usr/local/bin:${PATH}" \
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
92 LC_ALL=C
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
93
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
94 # IMPORTANT: No ENTRYPOINT for Galaxy/AWS Batch. Neutral CMD.
adc887a1a6de planemo upload commit 927c4ee71df7d19ceb10446a04618af22c99d839
galaxytrakr
parents:
diff changeset
95 CMD ["/bin/bash"]