a rust interface for maneuvering docker containers
Add the following to your Cargo.toml file
[dependencies]
shiplift = "0.3"Find them here.
Some small example programs can be found in this repository's examples directory.
To use shiplift, you must first have a docker daemon readily accessible. Typically this daemon processs
is resolvable via a url specified by an env var named DOCKER_HOST. If you are using osx, docker-machine typically
will have already set up every thing you need to get started when you run docker-machine env {envid}.
extern crate shiplift;
let docker = shiplift::Docker::new();If you wish to be more explicit you can provide a host in the form of a url.Url.
extern crate shiplift;
extern crate url;
use shiplift::Docker;
use url::Url;
let docker = Docker::host(Url::parse("http://yourhost").unwrap());If you are interacting with docker containers, chances are you will also need to interact with docker image information. You can interact docker images with docker.images().
extern crate shiplift;
use shiplift::Docker;
let docker = Docker.new();
let images = docker.images();for i in images.list(&Default::default()).unwrap() {
println!("-> {:?}", i);
}for i in image.search("rust").unwrap() {
println!("- {:?}", i);
}use shiplift::PullOptions;
let output = images.pull(
&PullOptions::builder().image("redis:2.8.18").build()
).unwrap();
for o in output {
println!("{:?}", o);
}the following is equivalent to docker build -t shiplift_test .
use shiplift::BuildOptions;
let output = images.build(
&BuildOptions::builder(".").tag("shiplift_test").build()
).unwrap();
for o in output {
println!("{:?}", o);
}let img = images.get("imagename");println!("- {:?}", img.inspect().unwrap());for h in img.history().unwrap() {
println!("- {:?}", h);
}println!("- {:?}", img.delete().unwrap());Containers are instances of images. To gain access to this interface use docker.containers()
extern crate shiplift;
use shiplift::Docker;
let docker = Docker.new();
let containers = docker.containers();for c in containers.list(&Default::default()).unwrap() {
println!("- {:?}", c);
}let container = containers.get("containerid");println!("- {:?}", container.inspect());println!("- {:?}", container.top().unwrap());(todoc)
for c in container.changes().unwrap() {
println!("- {:?}", c);
}for stats in container.stats().unwrap() {
println!("- {:?}", stats);
}container.stop();
container.start();
container.restart();todoc
There are plans on switching from rustc-serialize to serde for serialization in 0.4.0 this should not have major impact on current interfaces.
Doug Tangren (softprops) 2015-2016