NOTE: This is a fork-of-a-fork. The
kblobr
fork is missing several features and has some unconventional naming patterns that are fixed in this fork. Below is the original fork advisory.
This crate and repo were forked from https://github.com/ghmlee/rust-docker because the original repo seems to no longer be maintained.
With this in mind I will try to keep this crate as backwards compatible as possible.
Issues and PRs welcome.
This is a Docker Remote API binding in Rust. Documentation is available here.
[dependencies]
rs-docker = "0.0.58"
extern crate rs_docker;
use rs_docker::Docker;
fn main() {
let docker = match Docker::connect("unix:///var/run/docker.sock") {
Ok(docker) => docker,
Err(e) => { panic!("{}", e); }
};
}
- Rust (>= v1.4.0)
- Docker (>= v1.5.0)
extern crate rs_docker;
use rs_docker::Docker;
fn main() {
let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
Ok(docker) => docker,
Err(e) => { panic!("{}", e); }
};
let networks = match docker.get_networks() {
Ok(networks) => networks,
Err(e) => { panic!("{}", e); }
};
}
extern crate rs_docker;
use rs_docker::Docker;
fn main() {
let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
Ok(docker) => docker,
Err(e) => { panic!("{}", e); }
};
let containers = match docker.get_containers(false) {
Ok(containers) => containers,
Err(e) => { panic!("{}", e); }
};
}
extern crate rs_docker;
use rs_docker::Docker;
fn main() {
let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
Ok(docker) => docker,
Err(e) => { panic!("{}", e); }
};
let containers = match docker.get_containers(false) {
Ok(containers) => containers,
Err(e) => { panic!("{}", e); }
};
let stats = match docker.get_stats(&containers[0]) {
Ok(stats) => stats,
Err(e) => { panic!("{}", e); }
};
}
extern crate rs_docker;
use rs_docker::Docker;
fn main() {
let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
Ok(docker) => docker,
Err(e) => { panic!("{}", e); }
};
let images = match docker.get_images(false) {
Ok(images) => images,
Err(e) => { panic!({}, e); }
};
}
extern crate rs_docker;
use rs_docker::Docker;
fn main() {
let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
Ok(docker) => docker,
Err(e) => { panic!("{}", e); }
};
let info = match docker.get_system_info() {
Ok(info) => info,
Err(e) => { panic!("{}", e); }
};
}
extern crate rs_docker;
use rs_docker::Docker;
fn main() {
let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
Ok(docker) => docker,
Err(e) => { panic!("{}", e); }
};
let containers = match docker.get_containers(false) {
Ok(containers) => containers,
Err(e) => { panic!("{}", e); }
};
let processes = match docker.get_processes(&containers[0]) {
Ok(processes) => processes,
Err(e) => { panic!("{}", e); }
};
}
extern crate rs_docker;
use rs_docker::Docker;
fn main() {
let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
Ok(docker) => docker,
Err(e) => { panic!("{}", e); }
};
let containers = match docker.get_containers(false) {
Ok(containers) => containers,
Err(e) => { panic!("{}", e); }
};
let changes = match docker.get_filesystem_changes(&containers[0]) {
Ok(changes) => changes,
Err(e) => { panic!("{}", e); }
};
}
extern crate rs_docker;
use rs_docker::Docker;
fn main() {
let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
Ok(docker) => docker,
Err(e) => { panic!("{}", e); }
};
let containers = match docker.get_containers(false) {
Ok(containers) => containers,
Err(e) => { panic!("{}", e); }
};
let bytes = match docker.export_container(&containers[0]) {
Ok(bytes) => bytes,
Err(e) => { panic!("{}", e); }
};
}
extern crate rs_docker;
use rs_docker::Docker;
fn main() {
let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
Ok(docker) => docker,
Err(e) => { panic!("{}", e); }
};
let image = "debian".to_string();
let tag = "latest".to_string();
let statuses = match docker.create_image(image, tag) {
Ok(statuses) => statuses,
Err(e) => { panic!("{}", e); }
};
match statuses.last() {
Some(last) => {
println!("{}", last.clone().status.unwrap());
}
None => { println!("none"); }
}
}
extern crate rs_docker;
use rs_docker::Docker;
fn main() {
let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
Ok(docker) => docker,
Err(e) => { panic!("{}", e); }
};
let ping = match docker.ping() {
Ok(ping) => ping,
Err(e) => { panic!("{}", e); }
};
}
extern crate rs_docker;
use rs_docker::Docker;
fn main() {
let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
Ok(docker) => docker,
Err(e) => { panic!("{}", e); }
};
let version = match docker.get_version() {
Ok(version) => version,
Err(e) => {panic!("{}",e)}
};
}
By default, Docker Toolbox
runs docker
with TLS enabled. It auto-generates certificates. The docker-machine
will copy them to ~/.docker/machine/certs
on the host machine once the VM has started.
extern crate rs_docker;
use rs_docker::Docker;
use std::path::Path;
fn main() {
let key = Path::new("/Users/<username>/.docker/machine/certs/key.pem");
let cert = Path::new("/Users/<username>/.docker/machine/certs/cert.pem");
let ca = Path::new("/Users/<username>/.docker/machine/certs/ca.pem");
let mut docker = match Docker::connect("tcp://192.168.99.100:2376") {
Ok(docker) => docker,
Err(e) => { panic!("{}", e); }
};
docker.set_tls(&key, &cert, &ca).unwrap();
}
To have a consistent dev environment one can use the docker image in /devenv like so:
git clone https://gitlab.com/kblobr/rust-docker
cd rust-docker/devenv
./build_docker
(this assumes your user can run docker commands, otherwisesudo
)./run_docker -ti
- Already inside the container:
cd Code
cargo test
For changes:
- Fork it
- Create your a new remote upstream repository (
git remote add upstream https://gitlab.com/kblobr/rust-docker
) - Commit your changes (
git commit -m 'Adds some feature'
) - Push to the branch (
git push origin your-branch
) - Create new Pull Request