https://github.com/converged-computing/container-crafter

Matrix container builder for controlled experiments that vary size and layers

https://github.com/converged-computing/container-crafter

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
Last synced: 10 months ago · JSON representation

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
Created over 1 year ago · Last pushed over 1 year ago
Metadata Files
Readme License

README.md

Container Crafter

DOI

```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:

  1. Given the equivalent total size, does it take longer (and thus more costly) to pull many smaller layers, or few larger ones?
  2. 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

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
  • Versions: 0
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 6.0%
Average: 6.2%
Dependent repos count: 6.4%
Last synced: 10 months ago

Dependencies

.devcontainer/Dockerfile docker
  • ubuntu jammy build
go.mod go
  • 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
go.sum go
  • 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