Created
May 15, 2019 18:24
-
-
Save benosteen/fa66f00728aa0721844430e460074238 to your computer and use it in GitHub Desktop.
A multistage Dockerfile to separate out the build and run deps for archesproject/arches
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
FROM ubuntu:16.04 as base | |
USER root | |
## Setting default environment variables | |
ENV WEB_ROOT=/web_root | |
ENV DOCKER_DIR=/docker | |
# Root project folder | |
ENV ARCHES_ROOT=${WEB_ROOT}/arches | |
ENV WHEELS=/wheels | |
ENV PYTHONUNBUFFERED=1 | |
FROM base as wheelbuilder | |
WORKDIR ${WHEELS} | |
# Install pip requirements files | |
COPY ./arches/install/requirements.txt ${WHEELS}/requirements.txt | |
COPY ./arches/install/requirements_dev.txt ${WHEELS}/requirements_dev.txt | |
# Install packages required to build the python libs, then remove them | |
RUN set -ex \ | |
&& BUILD_DEPS=" \ | |
build-essential \ | |
libpcre3-dev \ | |
libxml2-dev \ | |
libjson0-dev \ | |
libproj-dev \ | |
libgdal1-dev \ | |
python-dev \ | |
python-software-properties \ | |
libpq-dev \ | |
zlib1g-dev \ | |
clang \ | |
make \ | |
pkg-config \ | |
xsltproc \ | |
docbook-xsl \ | |
mime-support \ | |
docbook-mathml \ | |
curl \ | |
python-setuptools \ | |
dos2unix \ | |
libgeos-3.5.0 \ | |
nodejs \ | |
nodejs-legacy \ | |
npm \ | |
libldap2-dev libsasl2-dev \ # these two to build the django-auth-ldap wheel | |
" \ | |
&& apt-get update && apt-get install -y --no-install-recommends $BUILD_DEPS \ | |
&& curl -O https://bootstrap.pypa.io/get-pip.py \ | |
&& python get-pip.py \ | |
&& rm -rf /var/lib/apt/lists/* get-pip.py. \ | |
&& pip install --no-cache-dir -U pip setuptools \ | |
&& pip wheel --no-cache-dir -b /tmp requests \ | |
&& pip wheel --no-cache-dir -b /tmp -r ${WHEELS}/requirements.txt \ | |
&& pip wheel --no-cache-dir -b /tmp -r ${WHEELS}/requirements_dev.txt \ | |
&& pip wheel --no-cache-dir -b /tmp 'gunicorn==19.7.1' \ | |
&& pip wheel --no-cache-dir -b /tmp django-auth-ldap | |
# Add Docker-related files | |
COPY docker/entrypoint.sh ${WHEELS}/docker/entrypoint.sh | |
RUN chmod -R 700 ${WHEELS}/docker/ &&\ | |
dos2unix ${WHEELS}/docker/* | |
FROM base | |
# Get the pre-built python wheels from the build environment | |
COPY --from=wheelbuilder ${WHEELS} ${WHEELS} | |
# Install packages required to run Arches | |
RUN set -ex \ | |
&& RUN_DEPS=" \ | |
mime-support \ | |
curl \ | |
python-setuptools \ | |
libgdal1-dev \ | |
libgeos-3.5.0 \ | |
nodejs \ | |
nodejs-legacy \ | |
npm \ | |
" \ | |
&& apt-get update && apt-get install -y --no-install-recommends $RUN_DEPS \ | |
&& curl -sL https://deb.nodesource.com/setup_6.x | bash - \ | |
&& apt-get install -y nodejs \ | |
&& curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ | |
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ | |
&& apt-get update \ | |
&& apt-get install yarn \ | |
&& curl -O https://bootstrap.pypa.io/get-pip.py \ | |
&& python get-pip.py \ | |
&& rm -rf /var/lib/apt/lists/* get-pip.py | |
## Install Postgresql client | |
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" >> /etc/apt/sources.list.d/pgdg.list &&\ | |
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - &&\ | |
apt-get update -y &&\ | |
apt-get install -y postgresql-client-9.6 | |
RUN mkdir ${WEB_ROOT} | |
## Install virtualenv | |
WORKDIR ${WEB_ROOT} | |
# Install the Arches application | |
COPY . ${ARCHES_ROOT} | |
RUN pip install virtualenv==15.1.0 \ | |
&& virtualenv ENV \ | |
&& . ENV/bin/activate \ | |
&& pip install -U pip setuptools \ | |
&& pip install requests \ | |
&& pip install -r ${WHEELS}/requirements.txt \ | |
-f ${WHEELS} \ | |
&& pip install -r ${WHEELS}/requirements_dev.txt \ | |
-f ${WHEELS} \ | |
&& rm -rf ${WHEELS} \ | |
&& rm -rf /root/.cache/pip/* | |
# From here, run commands from ARCHES_ROOT | |
WORKDIR ${ARCHES_ROOT} | |
RUN . ../ENV/bin/activate \ | |
&& pip install -e . --no-binary :all: | |
# Install Yarn components | |
COPY ./package.json ${ARCHES_ROOT}/package.json | |
RUN yarn install | |
COPY ${WHEELS}/docker/entrypoint.sh ${DOCKER_DIR}/entrypoint.sh | |
COPY docker/gunicorn_config.py ${ARCHES_ROOT}/gunicorn_config.py | |
COPY docker/settings_local.py ${ARCHES_ROOT}/arches/settings_local.py | |
# Set entrypoint | |
ENTRYPOINT ["/docker/entrypoint.sh"] | |
CMD ["run_arches"] | |
# Expose port 8000 | |
EXPOSE 8000 | |
# Set default workdir | |
WORKDIR ${ARCHES_ROOT} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment