-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile
126 lines (105 loc) · 5.27 KB
/
Dockerfile
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
115
116
117
118
119
120
121
122
123
124
125
126
FROM ubuntu:18.04
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y libqt4-dev libqtwebkit-dev \
cmake g++ libsvm-dev libglpk-dev zlib1g-dev libbz2-dev autoconf libtool doxygen patch subversion
RUN ln -s /usr/bin/make /usr/bin/gmake
COPY OpenMS/contrib /OpenMS/contrib
WORKDIR /OpenMS/contrib
RUN for F in BOOST XERCESC SEQAN GSL; do cmake -DBOOST_USE_STATIC=NO -DBUILD_TYPE=$F . ; done
COPY OpenMS/OpenMS-nmrML.tar.bz2 /tmp/OpenMS-nmrML.tar.bz2
RUN tar xjvf /tmp/OpenMS-nmrML.tar.bz2 -C /OpenMS
WORKDIR /OpenMS/OpenMS-nmrML
RUN cmake --fresh -DCMAKE_FIND_ROOT_PATH=/OpenMS/contrib . || /bin/true
## This is known to fail, hence the true
RUN make -j 4 FileInfo || /usr/bin/c++ -fopenmp -O3 -DNDEBUG -Wl,--copy-dt-needed-entries -rdynamic -fopenmp CMakeFiles/FileInfo.dir/source/APPLICATIONS/TOPP/FileInfo.C.o -o bin/FileInfo -Wl,-rpath,/OpenMS/OpenMS-nmrML/lib -lQtOpenGL -lQtGui -lQtSvg -lQtWebKit -lQtTest -lQtXml -lQtSql -lQtNetwork lib/libOpenMS.so -lQtGui -lQtOpenGL -lQtSvg -lQtWebKit -lQtTest -lQtXml -lQtSql -lQtNetwork lib/libOpenSwathAlgo.so /OpenMS/contrib/lib/libgsl.a /OpenMS/contrib/lib/libgslcblas.a -lsvm -lm /OpenMS/contrib/lib/libxerces-c.a /OpenMS/contrib/lib/libboost_iostreams-mt.a /OpenMS/contrib/lib/libboost_date_time-mt.a /OpenMS/contrib/lib/libboost_math_c99-mt.a /OpenMS/contrib/lib/libboost_regex-mt.a -lbz2 -lz -lglpk
COPY SemanticValidator.tgz /tmp/SemanticValidator.tgz
RUN tar xzvf /tmp/SemanticValidator.tgz
RUN make SemanticValidator || /usr/bin/c++ -fopenmp -O3 -DNDEBUG -Wl,--copy-dt-needed-entries -rdynamic CMakeFiles/SemanticValidator.dir/source/APPLICATIONS/UTILS/SemanticValidator.C.o -o bin/SemanticValidator -Wl,-rpath,/OpenMS/OpenMS-nmrML/lib lib/libOpenMS.so -lQtOpenGL -lQtGui -lQtSvg -lQtWebKit -lQtTest -lQtXml -lQtSql -lQtNetwork lib/libOpenSwathAlgo.so /OpenMS/contrib/lib/libgsl.a /OpenMS/contrib/lib/libgslcblas.a -lsvm -lm /OpenMS/contrib/lib/libxerces-c.a /OpenMS/contrib/lib/libboost_iostreams-mt.a /OpenMS/contrib/lib/libboost_date_time-mt.a /OpenMS/contrib/lib/libboost_math_c99-mt.a /OpenMS/contrib/lib/libboost_regex-mt.a -lbz2 -lz -lglpk
### Now the runtime environment
FROM ubuntu:18.04
COPY --from=0 /OpenMS/OpenMS-nmrML/bin /OpenMS/OpenMS-nmrML/bin
COPY --from=0 /OpenMS/OpenMS-nmrML/lib /OpenMS/OpenMS-nmrML/lib
COPY --from=0 /OpenMS/OpenMS-nmrML/share /OpenMS/OpenMS-nmrML/share
ENV OPENMS_DATA_PATH=/OpenMS/OpenMS-nmrML/share
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y libqt4-network libqt4-sql libqtcore4 libqtgui4 \
libglpk40 libsvm3 zlib1g libgomp1 \
apache2 libapache2-mod-php
# Smoke test
RUN /OpenMS/OpenMS-nmrML/bin/FileInfo --help
## Old binary builds
COPY binary.tgz /tmp/binary.tgz
RUN mkdir -p /OpenMS/OpenMS
WORKDIR /OpenMS/OpenMS
RUN tar xzvf /tmp/binary.tgz
RUN LD_LIBRARY_PATH=/OpenMS/OpenMS/lib/:$LD_LIBRARY_PATH OPENMS_DATA_PATH=/OpenMS/OpenMS-nmrML/share/OpenMS /OpenMS/OpenMS/bin/SemanticValidator --help
ENV PHP_INI_DIR /usr/local/etc/php
RUN set -eux; \
mkdir -p "$PHP_INI_DIR/conf.d"
ENV APACHE_CONFDIR /etc/apache2
ENV APACHE_ENVVARS $APACHE_CONFDIR/envvars
RUN set -eux; \
# generically convert lines like
# export APACHE_RUN_USER=www-data
# into
# : ${APACHE_RUN_USER:=www-data}
# export APACHE_RUN_USER
# so that they can be overridden at runtime ("-e APACHE_RUN_USER=...")
sed -ri 's/^export ([^=]+)=(.*)$/: ${\1:=\2}\nexport \1/' "$APACHE_ENVVARS"; \
\
# setup directories and permissions
. "$APACHE_ENVVARS"; \
for dir in \
"$APACHE_LOCK_DIR" \
"$APACHE_RUN_DIR" \
"$APACHE_LOG_DIR" \
; do \
rm -rvf "$dir"; \
mkdir -p "$dir"; \
chown "$APACHE_RUN_USER:$APACHE_RUN_GROUP" "$dir"; \
# allow running as an arbitrary user (https://github.com/docker-library/php/issues/743)
chmod 1777 "$dir"; \
done; \
\
# delete the "index.html" that installing Apache drops in here
rm -rvf /var/www/html/*; \
\
# logs should go to stdout / stderr
ln -sfT /dev/stderr "$APACHE_LOG_DIR/error.log"; \
ln -sfT /dev/stdout "$APACHE_LOG_DIR/access.log"; \
ln -sfT /dev/stdout "$APACHE_LOG_DIR/other_vhosts_access.log"; \
chown -R --no-dereference "$APACHE_RUN_USER:$APACHE_RUN_GROUP" "$APACHE_LOG_DIR"
# Apache + PHP requires preforking Apache for best results
RUN a2dismod mpm_event && a2enmod mpm_prefork
# PHP files should be handled by PHP, and should be preferred over any other file type
RUN { \
echo '<FilesMatch \.php$>'; \
echo '\tSetHandler application/x-httpd-php'; \
echo '</FilesMatch>'; \
echo; \
echo 'DirectoryIndex disabled'; \
echo 'DirectoryIndex index.php index.html'; \
echo; \
echo '<Directory /var/www/>'; \
echo '\tOptions -Indexes'; \
echo '\tAllowOverride All'; \
echo '</Directory>'; \
} | tee "$APACHE_CONFDIR/conf-available/docker-php.conf" \
&& a2enconf docker-php
WORKDIR /var/www/html
## Copy the validator and CV+Mapping
COPY src/nmrML-validator nmrML-validator
COPY nmrML /nmrML
RUN set -eux; \
# smoke test
php --version
COPY apache2-foreground /usr/local/bin/
COPY docker-php-entrypoint /usr/local/bin/
ENTRYPOINT ["docker-php-entrypoint"]
# https://httpd.apache.org/docs/2.4/stopping.html#gracefulstop
STOPSIGNAL SIGWINCH
RUN mkdir /var/www/html/nmrML-validator/files ; chown www-data:www-data /var/www/html/nmrML-validator/files
EXPOSE 80
CMD ["apache2-foreground"]