diff options
author | Harmen Stoppels <me@harmenstoppels.nl> | 2023-12-20 11:31:41 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-20 11:31:41 +0100 |
commit | 16e27ba4a6552f312b8982be0c32c390f4f8479a (patch) | |
tree | ed44c7ae6da0ef84a1bc9bdcc15198781b1d30c9 /.github/dependabot.yml | |
parent | 2fda288cc56e6df5d036419577358dfe17d270d1 (diff) | |
download | spack-16e27ba4a6552f312b8982be0c32c390f4f8479a.tar.gz spack-16e27ba4a6552f312b8982be0c32c390f4f8479a.tar.bz2 spack-16e27ba4a6552f312b8982be0c32c390f4f8479a.tar.xz spack-16e27ba4a6552f312b8982be0c32c390f4f8479a.zip |
`spack buildcache push --tag`: create container image with multiple roots (#41077)
This PR adds a flag `--tag/-t` to `buildcache push`, which you can use like
```
$ spack mirror add my-oci-registry oci://example.com/hello/world
$ spack -e my_env buildcache push --base-image ubuntu:22.04 --tag my_custom_tag my-oci-registry
```
and lets users ship a full, installed environment as a minimal container image where each image layer is one Spack package, on top of a base image of choice. The image can then be used as
```
$ docker run -it --rm example.com/hello/world:my_custom_tag
```
Apart from environments, users can also pick arbitrary installed spec from their database, for instance:
```
$ spack buildcache push --base-image ubuntu:22.04 --tag some_specs my-oci-registry gcc@12 cmake
$ docker run -it --rm example.com/hello/world:some_specs
```
It has many advantages over `spack containerize`:
1. No external tools required (`docker`, `buildah`, ...)
2. Creates images from locally installed Spack packages (No need to rebuild inside `docker build`, where troubleshooting build failures is notoriously hard)
3. No need for multistage builds (Spack just tarballs existing installations of runtime deps)
4. Reduced storage size / composability: when pushing multiple environments with common specs, container image layers are shared.
5. Automatic build cache: later `spack install` of the env elsewhere speeds up since the containerized environment is a build cache
Diffstat (limited to '.github/dependabot.yml')
0 files changed, 0 insertions, 0 deletions