https://github.com/converged-computing/container-crafter
Matrix container builder for controlled experiments that vary size and layers
Science Score: 36.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
○.zenodo.json file
-
✓DOI references
Found 2 DOI reference(s) in README -
✓Academic publication links
Links to: zenodo.org -
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (11.2%) to scientific vocabulary
Repository
Matrix container builder for controlled experiments that vary size and layers
Basic Info
- Host: GitHub
- Owner: converged-computing
- License: mit
- Language: Go
- Default Branch: main
- Size: 25.4 KB
Statistics
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 1
Metadata Files
README.md
Container Crafter
```console
/ \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ ( c | o | n | t | a | i | n | e | r ) ( c | r | a | f | t | e | r ) _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/
```
I want a tool that can programatically generate sets of containers with the following features:
- Control the number of layers and total size of image
- Read an experiment from a configuration file
- Build to a maximum size, size, or size distribution per layer
Goals
The goals are to be able to do a controlled experiment that varies the size of the containers, both total and number of layers. We would want to be able to answer the following questions:
- Given the equivalent total size, does it take longer (and thus more costly) to pull many smaller layers, or few larger ones?
- What happens to this pattern as the pulls are scaled across many nodes?
The experiment I had in mind (automation, configs, etc) is going to be under the container-chonks experiment set, where I'm looking at containers across the ecosystem and assessing pull times.
Usage
Parameter Space
For the study we are doing, we are interested in these maximum sizes:
- 53,702,097 bytes (25th percentile)
- 132,399,102 bytes (50th percentile)
- 392,602,448 bytes (75th percentile)
- 19,039,736,629 bytes (100th percentile)
These are percentiles of total sizes from the Dockerfile database, which we consider a reasonable sample of the ecosystem. For the number of layers:
- 6 (25th percentile)
- 9 (50th percentile)
- 14 (75th percentile)
- 153 (100th percentile)
Note that Docker does not allow you to build over 127 layers, although it will technically work for other container runtimes. We are setting a limit at 127 to mirror what the average user would have access to.
Matrix Generation
We and then are going to generate our builds from a configuration file examples/study.yaml. The matrix will be represented in a list of images, where each image has a particular total size and number of layers, and the layer size for each is calculated based on that.
```bash
Build all images
./bin/container-crafter create --config ./example/study.yaml
Push (they have common URI)
docker push ghcr.io/converged-computing/container-chonks --all-tags ```
After push, depending on the registry you might need to make the images public. If you need to cleanup locally:
bash
docker rmi $(docker images --filter=reference="*ghcr.io/converged-computing/container-chonks*" -q)
The images have layers that are arbitrary content written to a random file name, so they are unique. This means if you are doing a pulling study, the cache won't be used (which is the goal). Don't forget to make the repository public, if appropriate.
License
HPCIC DevTools is distributed under the terms of the MIT license. All new contributions must be made under this license.
See LICENSE, COPYRIGHT, and NOTICE for details.
SPDX-License-Identifier: (MIT)
LLNL-CODE- 842614
Owner
- Name: Converged Computing
- Login: converged-computing
- Kind: organization
- Website: https://converged-computing.org
- Repositories: 84
- Profile: https://github.com/converged-computing
The best of cloud and high performance computing: technology and community combined.
GitHub Events
Total
Last Year
Packages
- Total packages: 1
- Total downloads: unknown
- Total dependent packages: 0
- Total dependent repositories: 0
- Total versions: 0
proxy.golang.org: github.com/converged-computing/container-crafter
- Homepage: https://github.com/converged-computing/container-crafter
- Documentation: https://pkg.go.dev/github.com/converged-computing/container-crafter#section-documentation
- License: MIT
Rankings
Dependencies
- ubuntu jammy build
- github.com/Microsoft/go-winio v0.4.14
- github.com/akamensky/argparse v1.4.0
- github.com/containerd/log v0.1.0
- github.com/distribution/reference v0.6.0
- github.com/docker/docker v27.3.1+incompatible
- github.com/docker/go-connections v0.5.0
- github.com/docker/go-units v0.4.0
- github.com/felixge/httpsnoop v1.0.4
- github.com/go-logr/logr v1.4.2
- github.com/go-logr/stdr v1.2.2
- github.com/gogo/protobuf v1.3.2
- github.com/moby/docker-image-spec v1.3.1
- github.com/moby/moby v27.3.1+incompatible
- github.com/moby/term v0.5.0
- github.com/morikuni/aec v1.0.0
- github.com/opencontainers/go-digest v1.0.0
- github.com/opencontainers/image-spec v1.1.0
- github.com/pkg/errors v0.9.1
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0
- go.opentelemetry.io/otel v1.30.0
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.30.0
- go.opentelemetry.io/otel/metric v1.30.0
- go.opentelemetry.io/otel/sdk v1.30.0
- go.opentelemetry.io/otel/trace v1.30.0
- golang.org/x/exp v0.0.0-20240909161429-701f63a606c0
- golang.org/x/sys v0.25.0
- golang.org/x/time v0.6.0
- gopkg.in/yaml.v3 v3.0.1
- gotest.tools/v3 v3.5.1
- github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1
- github.com/Microsoft/go-winio v0.4.14
- github.com/akamensky/argparse v1.4.0
- github.com/cenkalti/backoff/v4 v4.3.0
- github.com/containerd/log v0.1.0
- github.com/davecgh/go-spew v1.1.1
- github.com/distribution/reference v0.6.0
- github.com/docker/docker v27.3.1+incompatible
- github.com/docker/go-connections v0.5.0
- github.com/docker/go-units v0.4.0
- github.com/felixge/httpsnoop v1.0.4
- github.com/go-logr/logr v1.2.2
- github.com/go-logr/logr v1.4.2
- github.com/go-logr/stdr v1.2.2
- github.com/gogo/protobuf v1.3.2
- github.com/google/go-cmp v0.6.0
- github.com/google/uuid v1.6.0
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0
- github.com/kisielk/errcheck v1.5.0
- github.com/kisielk/gotool v1.0.0
- github.com/konsorten/go-windows-terminal-sequences v1.0.1
- github.com/moby/docker-image-spec v1.3.1
- github.com/moby/moby v27.3.1+incompatible
- github.com/moby/term v0.5.0
- github.com/morikuni/aec v1.0.0
- github.com/opencontainers/go-digest v1.0.0
- github.com/opencontainers/image-spec v1.1.0
- github.com/pkg/errors v0.8.1
- github.com/pkg/errors v0.9.1
- github.com/pmezard/go-difflib v1.0.0
- github.com/sirupsen/logrus v1.4.1
- github.com/sirupsen/logrus v1.9.3
- github.com/stretchr/objx v0.1.1
- github.com/stretchr/testify v1.2.2
- github.com/stretchr/testify v1.9.0
- github.com/yuin/goldmark v1.1.27
- github.com/yuin/goldmark v1.2.1
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0
- go.opentelemetry.io/otel v1.30.0
- go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.30.0
- go.opentelemetry.io/otel/metric v1.30.0
- go.opentelemetry.io/otel/sdk v1.30.0
- go.opentelemetry.io/otel/trace v1.30.0
- go.opentelemetry.io/proto/otlp v1.3.1
- golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2
- golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550
- golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9
- golang.org/x/exp v0.0.0-20240909161429-701f63a606c0
- golang.org/x/mod v0.2.0
- golang.org/x/mod v0.3.0
- golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3
- golang.org/x/net v0.0.0-20190620200207-3b0461eec859
- golang.org/x/net v0.0.0-20200226121028-0de0cce0169b
- golang.org/x/net v0.0.0-20201021035429-f5854403a974
- golang.org/x/net v0.29.0
- golang.org/x/sync v0.0.0-20190423024810-112230192c58
- golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e
- golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9
- golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33
- golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a
- golang.org/x/sys v0.0.0-20190412213103-97732733099d
- golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b
- golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f
- golang.org/x/sys v0.25.0
- golang.org/x/text v0.3.0
- golang.org/x/text v0.3.3
- golang.org/x/text v0.18.0
- golang.org/x/time v0.6.0
- golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e
- golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e
- golang.org/x/tools v0.0.0-20200619180055-7c47624df98f
- golang.org/x/tools v0.0.0-20210106214847-113979e3529a
- golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7
- golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898
- golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543
- golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
- google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1
- google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1
- google.golang.org/grpc v1.66.1
- google.golang.org/protobuf v1.34.2
- gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405
- gopkg.in/yaml.v3 v3.0.1
- gotest.tools/v3 v3.5.1