#container-image #oci #container #docker #podman #image-processing #opencontainers

ocidir

A Rust library for reading and writing OCI (opencontainers) layout directories

5 unstable releases

0.3.1 Sep 20, 2024
0.3.0 Sep 13, 2024
0.2.1 Aug 16, 2024
0.2.0 Jul 23, 2024
0.1.0 Jun 2, 2024

#228 in Unix APIs

Download history 516/week @ 2024-11-14 418/week @ 2024-11-21 395/week @ 2024-11-28 767/week @ 2024-12-05 421/week @ 2024-12-12 298/week @ 2024-12-19 130/week @ 2024-12-26 506/week @ 2025-01-02 637/week @ 2025-01-09 642/week @ 2025-01-16 590/week @ 2025-01-23 758/week @ 2025-01-30 930/week @ 2025-02-06 463/week @ 2025-02-13 653/week @ 2025-02-20 592/week @ 2025-02-27

2,850 downloads per month
Used in 5 crates (4 directly)

MIT/Apache

34KB
672 lines

ocidir

Crates.io

docs.rs

Read and write to OCI image layout directories

This library contains medium and low-level APIs for working with OCI images, which are basically a directory with blobs and JSON files for metadata.

Dependency on cap-std

This library makes use of cap-std to operate in a capability-oriented fashion. In practice, the code in this project is well tested and would not traverse outside its own path root. However, using capabilities is a generally good idea when operating in the container ecosystem, in particular when actively processing tar streams.

Examples

To access an existing OCI directory:

# use ocidir::cap_std;
# use anyhow::{anyhow, Result};
# fn main() -> anyhow::Result<()> {
let d = cap_std::fs::Dir::open_ambient_dir("/path/to/ocidir", cap_std::ambient_authority())?;
let d = ocidir::OciDir::open(&d)?;
println!("{:?}", d.read_index()?.ok_or_else(|| anyhow!("missing Image Index"))?);
# Ok(())
# }

Dependencies

~12–23MB
~383K SLoC