|
1 | | -# Rust bindings for accessing the Go containers/image stack |
| 1 | +# Common synchronized files |
2 | 2 |
|
3 | | -This crate contains a Rust API that forks `/usr/bin/skopeo` and |
4 | | -talks to it via a custom API. You can use it to fetch container |
5 | | -images in a streaming fashion. |
6 | | - |
7 | | -At the time of this writing, you will need skopeo 1.6.0 or later. |
8 | | - |
9 | | -# Why? |
10 | | - |
11 | | -First, assume one is operating on a codebase that isn't Go, but wants |
12 | | -to interact with container images - we can't just include the Go containers/image |
13 | | -library. |
14 | | - |
15 | | -The primary intended use case of this is for things like |
16 | | -[ostree-containers](https://github.com/ostreedev/ostree-rs-ext/issues/18) |
17 | | -where we're using container images to encapsulate host operating system |
18 | | -updates, but we don't want to involve the [containers/image](github.com/containers/image/) |
19 | | -storage layer. |
20 | | - |
21 | | -What we *do* want from the containers/image library is support for things like |
22 | | -signatures and offline mirroring. More on this below. |
23 | | - |
24 | | -Forgetting things like ostree exist for a second - imagine that you wanted to |
25 | | -encapsulate a set of Debian/RPM/etc packages inside |
26 | | -a container image to ship for package-based operating systems. You could use this to stream |
27 | | -out the layer containing those packages and extract them directly, rather than serializing |
28 | | -everything to disk in the containers/storage disk location, only to copy it out again and delete the first. |
29 | | - |
30 | | -Another theoretical use case could be something like [krustlet](https://github.com/deislabs/krustlet), |
31 | | -which fetches WebAssembly blobs inside containers. Here again, we don't want to involve |
32 | | -containers/storage. |
33 | | - |
34 | | -# Desired containers/image features |
35 | | - |
36 | | -There are e.g. Rust libraries like [dkregistry-rs](https://github.com/camallo/dkregistry-rs) and |
37 | | -[oci-distribution](https://crates.io/crates/oci-distribution) and similar for other languages. |
38 | | - |
39 | | -However, the containers/image Go library has a lot of additional infrastructure |
40 | | -that will impose a maintenance burden to replicate: |
41 | | - |
42 | | - - Signatures (`man containers-auth.json`) |
43 | | - - Mirroring/renaming (`man containers-registries.conf`) |
44 | | - - Support for `~/.docker/config.json` for authentication as well as `/run` |
45 | | - |
46 | | -# Status |
47 | | - |
48 | | -API is subject to change. |
| 3 | +Files placed in this repository are automatically |
| 4 | +synchronized (via a pull request) to all repositories |
| 5 | +in the bootc-dev organization. |
0 commit comments