30 个版本
0.6.8 | 2024年7月20日 |
---|---|
0.6.5 | 2024年2月20日 |
0.6.4 | 2023年10月26日 |
0.6.2 | 2023年7月15日 |
0.2.7 | 2019年6月4日 |
#141 在 算法 分类中
59,336 每月下载量
用于 101 个 crate (直接使用 24 个)
270KB
4.5K SLoC
oci-spec-rs
Open Container Initiative (OCI) Rust 规范
此库提供了一个方便的方式来与 Open Container Initiative (OCI) 定义的规范进行交互。
[dependencies]
oci-spec = "0.6.8"
编译器支持:需要 rustc 1.54+
如果您想提议或发布新版本,请遵循我们的 发布流程文档。
镜像格式规范示例
- 从文件系统加载镜像清单
use oci_spec::image::ImageManifest;
let image_manifest = ImageManifest::from_file("manifest.json").unwrap();
assert_eq!(image_manifest.layers().len(), 5);
- 使用构建器创建新的镜像清单
use oci_spec::image::{
Descriptor,
DescriptorBuilder,
ImageManifest,
ImageManifestBuilder,
MediaType,
SCHEMA_VERSION
};
let config = DescriptorBuilder::default()
.media_type(MediaType::ImageConfig)
.size(7023)
.digest("sha256:b5b2b2c507a0944348e0303114d8d93aaaa081732b86451d9bce1f432a537bc7")
.build()
.expect("build config descriptor");
let layers: Vec<Descriptor> = [
(
32654,
"sha256:9834876dcfb05cb167a5c24953eba58c4ac89b1adf57f28f2f9d09af107ee8f0",
),
(
16724,
"sha256:3c3a4604a545cdc127456d94e421cd355bca5b528f4a9c1905b15da2eb4a4c6b",
),
(
73109,
"sha256:ec4b8955958665577945c89419d1af06b5f7636b4ac3da7f12184802ad867736",
),
]
.iter()
.map(|l| {
DescriptorBuilder::default()
.media_type(MediaType::ImageLayerGzip)
.size(l.0)
.digest(l.1.to_owned())
.build()
.expect("build layer")
})
.collect();
let image_manifest = ImageManifestBuilder::default()
.schema_version(SCHEMA_VERSION)
.config(config)
.layers(layers)
.build()
.expect("build image manifest");
image_manifest.to_file_pretty("my-manifest.json").unwrap();
- my-manifest.json 的内容
{
"schemaVersion": 2,
"config": {
"mediaType": "application/vnd.oci.image.config.v1+json",
"digest": "sha256:b5b2b2c507a0944348e0303114d8d93aaaa081732b86451d9bce1f432a537bc7",
"size": 7023
},
"layers": [
{
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
"digest": "sha256:9834876dcfb05cb167a5c24953eba58c4ac89b1adf57f28f2f9d09af107ee8f0",
"size": 32654
},
{
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
"digest": "sha256:3c3a4604a545cdc127456d94e421cd355bca5b528f4a9c1905b15da2eb4a4c6b",
"size": 16724
},
{
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
"digest": "sha256:ec4b8955958665577945c89419d1af06b5f7636b4ac3da7f12184802ad867736",
"size": 73109
}
]
}
分发规范示例
- 创建仓库列表
use oci_spec::distribution::RepositoryListBuilder;
let list = RepositoryListBuilder::default()
.repositories(vec!["busybox".to_owned()])
.build().unwrap();
贡献
此项目欢迎您的 Pull Request 和问题报告。如果您想处理某个问题,请先在您想要处理的问题上留言,以防止贡献者在同一问题上重复工作。
依赖项
~3.5–5.5MB
~104K SLoC