# Dockerfile to build the matrixdotorg/synapse docker images. # # To build the image, run `docker build` command from the root of the # synapse repository: # # docker build -f docker/Dockerfile . # # There is an optional PYTHON_VERSION build argument which sets the # version of python to build against: for example: # # docker build -f docker/Dockerfile --build-arg PYTHON_VERSION=3.6 --build-arg MARCH=skylake-avx512 . # ARG PYTHON_VERSION=3.7.4 ARG MARCH=skylake-avx512 ### ### Stage 0: builder ### FROM matrixdotorg/optimised-python:${PYTHON_VERSION}-optimized-lto-${MARCH} as builder # install the OS build deps RUN apt-get update && apt-get install -y build-essential libpq-dev libffi-dev libexpat1-dev libxml2-dev libxslt-dev # build things which have slow build steps, before we copy synapse, so that # the layer can be cached. # # (we really just care about caching a wheel here, as the "pip install" below # will install them again.) RUN pip install --prefix="/install" --no-warn-script-location \ cryptography \ msgpack-python \ pillow \ pynacl # now install synapse and all of the python deps to /install. COPY synapse /synapse/synapse/ COPY scripts /synapse/scripts/ COPY MANIFEST.in README.rst setup.py synctl /synapse/ RUN pip install --prefix="/install" --no-warn-script-location \ /synapse[all] RUN chown -R root:root /usr/local /install ### ### Stage 1: runtime ### FROM matrixdotorg/optimised-python:${PYTHON_VERSION}-optimized-lto-${MARCH} # xmlsec is required for saml support RUN apt-get update && apt-get install -y libpq5 xmlsec1 libxslt1.1 COPY --from=builder /install /usr/local COPY ./docker/start.py /start.py COPY ./docker/conf /conf VOLUME ["/data"] EXPOSE 8008/tcp 8009/tcp 8448/tcp ENTRYPOINT ["/start.py"]