1 unstable release

0.4.0 Mar 20, 2024

#912 in WebAssembly


Used in containerd-shim-wasm

Apache-2.0

18KB
318 lines

OCI Tar Builder

This is a library that can be used to build OCI tar archives. It is used by the wasi-demo-app crate to build the OCI tar archive that is used to run the demo app. The current implementation is to support encapsulating the wasi-demo-app wasm module as an OCI tar.

Contributing

We welcome contributions to this to make it more robust, useful, and generally better.

Library Usage

The library is currently not published to crates.io, so you will need to add the following to your Cargo.toml:

[dependencies]
oci-tar-builder = { git = "https://github.com/containerd/runwasi.git" }

See wasi-demo-app build script for an example.

Executable usage

There is an experimental executable that uses the library and can package a wasm module as an OCI image with wasm layers. See the OCI WASM in containerd for more information.

To generate the package and import to a registry using a tool such as regctl:

cargo run --bin oci-tar-builder -- --name wasi-demo-oci --repo ghcr.io/containerd/runwasi --tag latest --module ./target/wasm32-wasi/debug/wasi-demo-app.wasm -o ./dist/img-oci.tar
regctl image import localhost:5000/wasi-demo-oci:latest ./dist/img-oci.tar        

View the manifest created, notice that the media types for the layers are application/vnd.bytecodealliance.wasm.component.layer.v0+wasm which are subject to change.

Name:                                localhost:5000/wasi-demo-oci:latest
MediaType:                           application/vnd.oci.image.manifest.v1+json
Digest:                              sha256:6c48b431d29a1ea1ece13fa50e9f33e4d164e07f6a501dbed668aed947002c5c
Annotations:
  io.containerd.image.name:          ghcr.io/containerd/runwasi/wasi-demo-oci:latest
  org.opencontainers.image.ref.name: latest
Total Size:                          2.590MB

Config:
  Digest:                            sha256:beb7483682ae4ec45d02cd7cee8ee733f8dc610cb7e91070dc8f10567365bdd7
  MediaType:                         application/vnd.oci.image.config.v1+json
  Size:                              138B

Layers:

  Digest:                            sha256:656e978ae0c37156a6abe06052a588e5c700346650765859981ebd2089cffd42
  MediaType:                         application/vnd.bytecodealliance.wasm.component.layer.v0+wasm
  Size:                              2.590MB

Spec

See the OCI Image Spec for more information on the OCI tar format.

In order to be compatible with Docker, since Docker does not currently support the OCI format, this also includes a manifest.json file at the root of the tar that describes the image in a way that Docker can import it.

Dependencies

~8–19MB
~271K SLoC