-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Make pip install faster in Docker build for Complement testing #9610
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Speed up Docker builds and make it nicer to test against Complement while developing (install all dependencies before copying the project). |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -25,42 +25,40 @@ LABEL org.opencontainers.image.licenses='Apache-2.0' | |
|
||
# install the OS build deps | ||
RUN apt-get update && apt-get install -y \ | ||
build-essential \ | ||
libffi-dev \ | ||
libjpeg-dev \ | ||
libpq-dev \ | ||
libssl-dev \ | ||
libwebp-dev \ | ||
libxml++2.6-dev \ | ||
libxslt1-dev \ | ||
openssl \ | ||
rustc \ | ||
zlib1g-dev \ | ||
&& rm -rf /var/lib/apt/lists/* | ||
|
||
# Build dependencies that are not available as wheels, to speed up rebuilds | ||
RUN pip install --prefix="/install" --no-warn-script-location \ | ||
cryptography \ | ||
frozendict \ | ||
jaeger-client \ | ||
opentracing \ | ||
# Match the version constraints of Synapse | ||
"prometheus_client>=0.4.0" \ | ||
psycopg2 \ | ||
pycparser \ | ||
pyrsistent \ | ||
pyyaml \ | ||
simplejson \ | ||
threadloop \ | ||
thrift | ||
|
||
# now install synapse and all of the python deps to /install. | ||
COPY synapse /synapse/synapse/ | ||
build-essential \ | ||
libffi-dev \ | ||
libjpeg-dev \ | ||
libpq-dev \ | ||
libssl-dev \ | ||
libwebp-dev \ | ||
libxml++2.6-dev \ | ||
libxslt1-dev \ | ||
MadLittleMods marked this conversation as resolved.
Show resolved
Hide resolved
|
||
openssl \ | ||
rustc \ | ||
zlib1g-dev \ | ||
&& rm -rf /var/lib/apt/lists/* | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Auto-formatting from VSCode to make everything 4 spaces |
||
|
||
# Copy just what we need to pip install | ||
COPY scripts /synapse/scripts/ | ||
COPY MANIFEST.in README.rst setup.py synctl /synapse/ | ||
COPY synapse/__init__.py /synapse/synapse/__init__.py | ||
COPY synapse/python_dependencies.py /synapse/synapse/python_dependencies.py | ||
MadLittleMods marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
# To speed up rebuilds, install all of the dependencies before we copy over | ||
# the whole synapse project so that we this layer in the Docker cache can be | ||
# used while you develop on the source | ||
# | ||
# This is aiming at installing the `install_requires` and `extras_require` from `setup.py` | ||
RUN pip install --prefix="/install" --no-warn-script-location \ | ||
/synapse[all] | ||
/synapse[all] | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. All of the new goodness is here! If files have changed in a |
||
|
||
# Copy over the rest of the project | ||
COPY synapse /synapse/synapse/ | ||
|
||
# Install the synapse package itself and all of its children packages. | ||
# | ||
# This is aiming at installing only the `packages=find_packages(...)` from `setup.py | ||
RUN pip install --prefix="/install" --no-deps --no-warn-script-location /synapse | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I learned a lot about
|
||
|
||
### | ||
### Stage 1: runtime | ||
|
@@ -69,16 +67,16 @@ RUN pip install --prefix="/install" --no-warn-script-location \ | |
FROM docker.io/python:${PYTHON_VERSION}-slim | ||
|
||
RUN apt-get update && apt-get install -y \ | ||
curl \ | ||
gosu \ | ||
libjpeg62-turbo \ | ||
libpq5 \ | ||
libwebp6 \ | ||
xmlsec1 \ | ||
libjemalloc2 \ | ||
libssl-dev \ | ||
openssl \ | ||
&& rm -rf /var/lib/apt/lists/* | ||
curl \ | ||
gosu \ | ||
libjpeg62-turbo \ | ||
libpq5 \ | ||
libwebp6 \ | ||
xmlsec1 \ | ||
libjemalloc2 \ | ||
libssl-dev \ | ||
openssl \ | ||
&& rm -rf /var/lib/apt/lists/* | ||
|
||
COPY --from=builder /install /usr/local | ||
COPY ./docker/start.py /start.py | ||
|
@@ -91,4 +89,4 @@ EXPOSE 8008/tcp 8009/tcp 8448/tcp | |
ENTRYPOINT ["/start.py"] | ||
|
||
HEALTHCHECK --interval=1m --timeout=5s \ | ||
CMD curl -fSs http://localhost:8008/health || exit 1 | ||
CMD curl -fSs http://localhost:8008/health || exit 1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Our new step installs all dependencies before we
COPY
the synapse source, not just ones without wheels.