Crates.io | oci-registry-client |
lib.rs | oci-registry-client |
version | 0.2.2 |
source | src |
created_at | 2020-03-30 23:45:12.450896 |
updated_at | 2024-09-19 12:45:33.830751 |
description | A async client for Docker Registry HTTP V2 protocol. |
homepage | https://github.com/ecarrara/oci-registry-client |
repository | https://github.com/ecarrara/oci-registry-client |
max_upload_size | |
id | 224585 |
size | 63,177 |
A async client for OCI compliant image registries and Docker Registry HTTP V2 protocol.
The [DockerRegistryClientV2
] provides functions to query Registry API and download blobs.
use std::{path::Path, fs::File, io::Write};
use oci_registry_client::DockerRegistryClientV2;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut client = DockerRegistryClientV2::new(
"registry.docker.io",
"https://registry-1.docker.io",
"https://auth.docker.io/token"
);
let token = client.auth("repository", "library/ubuntu", "latest").await?;
client.set_auth_token(Some(token));
let manifest = client.manifest("library/ubuntu", "latest").await?;
println!("{:?}", manifest);
for layer in &manifest.layers {
let mut out_file = File::create(Path::new("/tmp/").join(&layer.digest))?;
let mut blob = client.blob("library/ubuntu", &layer.digest).await?;
while let Some(chunk) = blob.chunk().await? {
out_file.write_all(&chunk)?;
}
}
Ok(())
}
This project is licensed under the MIT License.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in oci-registry-client by you, shall be licensed as MIT, without any additional terms or conditions.