chore: optimize dockerfile #61
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Type of change
Description of the change
In a recent project, we discovered that our Docker image was unnecessarily large and somewhat inefficient, so we implemented a few improvements.
The first change involved optimizing layer handling and cache usage. Every instruction in a
Dockerfilecreates a layer that Docker automatically caches. When we copied the entire project in one step, any change to any file would invalidate the cache and trigger a full rebuild. However, package installation does not need to be repeated if dependencies haven’t changed. To take advantage of layer caching, we split the copy step into two: first we copy only thepyproject.tomlanduv.lockfiles and install dependencies, and then we copy the rest of the project. This allows Docker to reuse the cached dependency layer whenever those files remain unchanged.We also reduced the APT footprint by skipping recommended packages and installing only the ones we actually need.
Finally, we could add even more caching by using BuildKit via docker buildx. Enabling BuildKit in a devcontainer requires installing or configuring docker buildx on the host, which may complicate the developer workflow, but we can discuss whether the benefits outweigh the extra setup.
Related PRs
N/A