celery/docker/Dockerfile

117 lines
3.5 KiB
Docker

FROM debian:jessie
ENV PYTHONIOENCODING UTF-8
# Pypy is installed from a package manager because it takes so long to build.
RUN apt-get update && apt-get install -y build-essential \
libcurl4-openssl-dev \
libffi-dev \
tk-dev \
xz-utils \
curl \
lsb-release \
git \
libmemcached-dev \
make \
liblzma-dev \
libreadline-dev \
libbz2-dev \
llvm \
libncurses5-dev \
libssl-dev \
libsqlite3-dev \
wget \
pypy \
python-openssl \
libncursesw5-dev \
zlib1g-dev \
pkg-config
# Setup variables. Even though changing these may cause unnecessary invalidation of
# unrelated elements, grouping them together makes the Dockerfile read better.
ENV PROVISIONING /provisioning
ARG CELERY_USER=developer
# Check for mandatory build arguments
RUN : "${CELERY_USER:?CELERY_USER build argument needs to be set and non-empty.}"
ENV HOME /home/$CELERY_USER
ENV PATH="$HOME/.pyenv/bin:$PATH"
# Copy and run setup scripts
WORKDIR $PROVISIONING
COPY docker/scripts/install-couchbase.sh .
# Scripts will lose thier executable flags on copy. To avoid the extra instructions
# we call the shell directly.
RUN sh install-couchbase.sh
COPY docker/scripts/create-linux-user.sh .
RUN sh create-linux-user.sh
# Swap to the celery user so packages and celery are not installed as root.
USER $CELERY_USER
COPY docker/scripts/install-pyenv.sh .
RUN sh install-pyenv.sh
# Install celery
WORKDIR $HOME
COPY --chown=1000:1000 requirements $HOME/requirements
COPY --chown=1000:1000 docker/entrypoint /entrypoint
RUN chmod gu+x /entrypoint
# Define the local pyenvs
RUN pyenv local python3.6 python3.5 python3.4 python2.7 python3.7
RUN pyenv exec python2.7 -m pip install --upgrade pip setuptools && \
pyenv exec python3.4 -m pip install --upgrade pip setuptools && \
pyenv exec python3.5 -m pip install --upgrade pip setuptools && \
pyenv exec python3.6 -m pip install --upgrade pip setuptools && \
pyenv exec python3.7 -m pip install --upgrade pip setuptools
# Setup one celery environment for basic development use
RUN pyenv exec python3.7 -m pip install \
-r requirements/default.txt \
-r requirements/test.txt \
-r requirements/test-ci-default.txt \
-r requirements/docs.txt \
-r requirements/test-integration.txt \
-r requirements/pkgutils.txt && \
pyenv exec python3.6 -m pip install \
-r requirements/default.txt \
-r requirements/test.txt \
-r requirements/test-ci-default.txt \
-r requirements/docs.txt \
-r requirements/test-integration.txt \
-r requirements/pkgutils.txt && \
pyenv exec python3.5 -m pip install \
-r requirements/default.txt \
-r requirements/test.txt \
-r requirements/test-ci-default.txt \
-r requirements/docs.txt \
-r requirements/test-integration.txt \
-r requirements/pkgutils.txt && \
pyenv exec python3.4 -m pip install \
-r requirements/default.txt \
-r requirements/test.txt \
-r requirements/test-ci-default.txt \
-r requirements/docs.txt \
-r requirements/test-integration.txt \
-r requirements/pkgutils.txt && \
pyenv exec python2.7 -m pip install \
-r requirements/default.txt \
-r requirements/test.txt \
-r requirements/test-ci-default.txt \
-r requirements/docs.txt \
-r requirements/test-integration.txt \
-r requirements/pkgutils.txt
COPY --chown=1000:1000 . $HOME/celery
WORKDIR $HOME/celery
# Setup the entrypoint, this ensures pyenv is initialized when a container is started
# and that any compiled files from earlier steps or from moutns are removed to avoid
# py.test failing with an ImportMismatchError
ENTRYPOINT ["/entrypoint"]