-
Notifications
You must be signed in to change notification settings - Fork 239
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Speedup the building of Docker images #18038
base: develop
Are you sure you want to change the base?
Conversation
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.
A few very minor things, but otherwise this LGTM. This included a few tricks I wasn't aware of myself. Thanks for taking the time to go through and do this!
Needs a git revert d113209
before merge, of course.
|
||
ENV UV_LINK_MODE=copy |
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.
Could you leave a comment explaining why this is useful?
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.
From https://github.com/astral-sh/uv/blob/main/docs/guides/integration/docker.md#caching:
Changing the default UV_LINK_MODE silences warnings about not being able to use hard links since the cache and sync target are on separate file systems.
docker/Dockerfile
Outdated
xmlsec1:${arch} \ | ||
libjemalloc2:${arch} \ | ||
libicu72:${arch} \ | ||
openssl:${arch} || exit 10; \ |
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.
Why exit 10
? Is the exit code returned by apt-get download
in case of failure not appropriate?
mkdir -p /install-${arch}/var/lib/dpkg/status.d/ && \ | ||
for deb in /tmp/debs-${arch}/*.deb; do \ | ||
package_name=$(dpkg-deb -I ${deb} | awk '/^ Package: .*$/ {print $2}'); \ | ||
echo "Process: ${package_name}"; \ |
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.
echo "Process: ${package_name}"; \ | |
echo "Extracting: ${package_name}"; \ |
@@ -78,38 +49,20 @@ ARG TEST_ONLY_IGNORE_POETRY_LOCKFILE | |||
# Export the dependencies, but only if we're actually going to use the Poetry lockfile. | |||
# Otherwise, just create an empty requirements file so that the Dockerfile can | |||
# proceed. | |||
RUN if [ -z "$TEST_ONLY_IGNORE_POETRY_LOCKFILE" ]; then \ | |||
/root/.local/bin/poetry export --extras all -o /synapse/requirements.txt ${TEST_ONLY_SKIP_DEP_HASH_VERIFICATION:+--without-hashes}; \ | |||
ARG POETRY_VERSION |
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.
Nitpick: set this here instead of in the global scope, since no other build stage uses it.
|
||
ENV UV_LINK_MODE=copy |
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.
From https://github.com/astral-sh/uv/blob/main/docs/guides/integration/docker.md#caching:
Changing the default UV_LINK_MODE silences warnings about not being able to use hard links since the cache and sync target are on separate file systems.
RUN if [ -z "$TEST_ONLY_IGNORE_POETRY_LOCKFILE" ]; then \ | ||
/root/.local/bin/poetry export --extras all -o /synapse/requirements.txt ${TEST_ONLY_SKIP_DEP_HASH_VERIFICATION:+--without-hashes}; \ | ||
ARG POETRY_VERSION | ||
RUN --mount=type=cache,target=/root/.cache/uv \ |
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.
Should UV_LINK_MODE=copy
be set here as well?
This is a split off #18033
This uses a few tricks to speed up the building of docker images:
uv pip install
instead ofpip install
. This saves a bunch of time, especially when cross-compilingapt-get download
plusdpkg --extract