Documentation Index Fetch the complete documentation index at: https://mintlify.com/fussybeaver/bollard/llms.txt
Use this file to discover all available pages before exploring further.
Bollard provides a full set of async image management methods on the Docker struct. Pull, build, inspect, tag, push, and export operations are all covered. Build and pull operations return a Stream of progress events that you can consume incrementally.
Pulling an Image
create_image pulls (or imports) an image from a registry. It returns a Stream<Item = Result<CreateImageInfo, Error>> so you can observe download progress layer by layer.
use bollard :: Docker ;
use bollard :: query_parameters :: CreateImageOptionsBuilder ;
use futures_util :: TryStreamExt ;
let docker = Docker :: connect_with_socket_defaults () . unwrap ();
docker
. create_image (
Some (
CreateImageOptionsBuilder :: default ()
. from_image ( "alpine:3" )
. build (),
),
None ,
None ,
)
. try_collect :: < Vec < _ >>()
. await ? ;
The third argument to create_image is an optional DockerCredentials
struct for pulling from private registries.
Listing Images
list_images returns Vec<ImageSummary>. Filter by dangling, label, or other keys.
use bollard :: Docker ;
use bollard :: query_parameters :: ListImagesOptionsBuilder ;
use std :: collections :: HashMap ;
let docker = Docker :: connect_with_socket_defaults () . unwrap ();
let mut filters = HashMap :: new ();
filters . insert ( "dangling" , vec! [ "true" ]);
let images = docker
. list_images ( Some (
ListImagesOptionsBuilder :: default ()
. all ( true )
. filters ( & filters )
. build (),
))
. await ? ;
for img in & images {
println! ( "{:?} — {}" , img . repo_tags, img . size);
}
Inspecting an Image
inspect_image returns ImageInspect with full metadata: architecture, OS, layers, exposed ports, and more.
use bollard :: Docker ;
let docker = Docker :: connect_with_socket_defaults () . unwrap ();
let info = docker . inspect_image ( "alpine:3" ) . await ? ;
println! ( "Architecture: {:?}" , info . architecture);
println! ( "OS: {:?}" , info . os);
println! ( "Layers: {:?}" , info . root_fs . and_then ( | r | r . layers));
Building an Image
build_image streams BuildInfo events. Provide a BuildImageOptions, optional registry credentials, and a tar archive body.
use bollard :: Docker ;
use bollard :: query_parameters :: BuildImageOptionsBuilder ;
use bollard :: body_full;
use futures_util :: TryStreamExt ;
use std :: fs :: File ;
use std :: io :: Read ;
let docker = Docker :: connect_with_socket_defaults () . unwrap ();
let options = BuildImageOptionsBuilder :: default ()
. dockerfile ( "Dockerfile" )
. t ( "my-image:latest" )
. rm ( true )
. build ();
let mut file = File :: open ( "tarball.tar.gz" ) . unwrap ();
let mut contents = Vec :: new ();
file . read_to_end ( & mut contents ) . unwrap ();
let build_stream = docker . build_image ( options , None , Some ( body_full ( contents . into ())));
build_stream
. try_for_each ( | info | async move {
if let Some ( stream ) = info . stream {
print! ( "{stream}" );
}
Ok (())
})
. await ? ;
For advanced builds using BuildKit (multi-stage caching, secrets, SSH
forwarding), enable the buildkit_providerless feature and set
version(BuilderVersion::BuilderBuildKit) in your options. See the
BuildKit guide for details.
Tagging an Image
Tag an existing image to add it to a repository under a new name or tag.
use bollard :: Docker ;
use bollard :: query_parameters :: TagImageOptionsBuilder ;
let docker = Docker :: connect_with_socket_defaults () . unwrap ();
docker
. tag_image (
"my-image:latest" ,
Some (
TagImageOptionsBuilder :: default ()
. repo ( "registry.example.com/my-image" )
. tag ( "v1.0.1" )
. build (),
),
)
. await ? ;
Pushing an Image
push_image returns a Stream<Item = Result<PushImageInfo, Error>>. Consume it fully to ensure the push completes.
use bollard :: Docker ;
use bollard :: auth :: DockerCredentials ;
use bollard :: query_parameters :: PushImageOptionsBuilder ;
use futures_util :: TryStreamExt ;
let docker = Docker :: connect_with_socket_defaults () . unwrap ();
let credentials = Some ( DockerCredentials {
username : Some ( "myuser" . to_string ()),
password : Some ( "mypassword" . to_string ()),
.. Default :: default ()
});
docker
. push_image (
"registry.example.com/my-image" ,
Some ( PushImageOptionsBuilder :: default () . tag ( "v1.0.1" ) . build ()),
credentials ,
)
. try_collect :: < Vec < _ >>()
. await ? ;
Always drive the stream to completion with .try_collect() or
.try_for_each(). Dropping it early cancels the push.
Exporting and Importing Images
Export single image
Export multiple images
Import image
use bollard :: Docker ;
use futures_util :: TryStreamExt ;
use tokio :: io :: AsyncWriteExt ;
use tokio :: fs :: File ;
let docker = Docker :: connect_with_socket_defaults () . unwrap ();
let mut file = File :: create ( "alpine.tar" ) . await ? ;
let mut stream = docker . export_image ( "alpine:3" );
while let Some ( chunk ) = stream . try_next () . await ? {
file . write_all ( & chunk ) . await ? ;
}
Removing an Image
use bollard :: Docker ;
use bollard :: query_parameters :: RemoveImageOptionsBuilder ;
let docker = Docker :: connect_with_socket_defaults () . unwrap ();
let deleted = docker
. remove_image (
"my-image:latest" ,
Some (
RemoveImageOptionsBuilder :: default ()
. force ( false )
. noprune ( false )
. build (),
),
None , // optional DockerCredentials
)
. await ? ;
for d in & deleted {
println! ( "{:?}" , d );
}
Pruning Unused Images
use bollard :: Docker ;
use bollard :: query_parameters :: PruneImagesOptionsBuilder ;
use std :: collections :: HashMap ;
let docker = Docker :: connect_with_socket_defaults () . unwrap ();
let mut filters = HashMap :: new ();
filters . insert ( "until" , vec! [ "24h" ]);
let result = docker
. prune_images ( Some (
PruneImagesOptionsBuilder :: default ()
. filters ( & filters )
. build (),
))
. await ? ;
println! (
"Reclaimed: {:?} bytes" ,
result . space_reclaimed
);
Searching Docker Hub
use bollard :: Docker ;
use bollard :: query_parameters :: SearchImagesOptionsBuilder ;
let docker = Docker :: connect_with_socket_defaults () . unwrap ();
// SearchImagesOptions requires a `term` field
let results = docker
. search_images (
bollard :: query_parameters :: SearchImagesOptionsBuilder :: default ()
. term ( "alpine" )
. limit ( 5 )
. build (),
)
. await ? ;
for item in & results {
println! ( "{} — stars: {:?}" , item . name . as_deref () . unwrap_or ( "?" ), item . star_count);
}
Committing a Container as an Image
commit_container snapshots the filesystem of a running or stopped container and saves it as a new image.
use bollard :: Docker ;
use bollard :: models :: ContainerConfig ;
use bollard :: query_parameters :: CommitContainerOptionsBuilder ;
let docker = Docker :: connect_with_socket_defaults () . unwrap ();
let options = CommitContainerOptionsBuilder :: default ()
. container ( "my-app" )
. repo ( "my-snapshot" )
. tag ( "v2" )
. pause ( true )
. build ();
let id = docker
. commit_container ( options , ContainerConfig :: default ())
. await ? ;
println! ( "New image ID: {:?}" , id . id);