Skip to main content

DockerClient

Struct DockerClient 

Source
pub struct DockerClient { /* private fields */ }
Expand description

Client for executing Docker CLI commands

This client wraps Docker CLI operations using our CommandExecutor collaborator, enabling testability and consistency with other external tool clients (Ansible, OpenTofu, LXD). Each Docker subcommand is exposed as a separate method.

§Architecture

The client uses CommandExecutor as a collaborator for actual command execution, following the same pattern as AnsibleClient, TofuClient, and LxdClient.

§Example

use torrust_tracker_deployer_lib::adapters::docker::DockerClient;

let docker = DockerClient::new();

// Build an image
docker.build_image("docker/app", "my-app", "latest")?;

// Check if it exists
let exists = docker.image_exists("my-app", "latest")?;
assert!(exists);

Implementations§

Source§

impl DockerClient

Source

pub fn new() -> Self

Create a new Docker client

§Example
use torrust_tracker_deployer_lib::adapters::docker::DockerClient;

let docker = DockerClient::new();
Source

pub fn build_image<P: AsRef<Path>>( &self, dockerfile_dir: P, image_name: &str, image_tag: &str, ) -> Result<String, DockerError>

Build a Docker image from a Dockerfile directory

Executes docker build -t <name>:<tag> <path> to build an image.

§Arguments
  • dockerfile_dir - Path to directory containing the Dockerfile
  • image_name - Name for the Docker image (e.g., “my-ssh-server”)
  • image_tag - Tag for the image (e.g., “latest”)
§Returns

The build output on success

§Errors

Returns DockerError::BuildFailed if the build command fails

§Example
docker.build_image("docker/ssh-server", "my-ssh", "latest")?;
Source

pub fn list_images( &self, repository: Option<&str>, ) -> Result<Vec<String>, DockerError>

List Docker images with optional repository filter

Executes docker images with formatting to get structured output.

§Arguments
  • repository - Optional repository name to filter by
§Returns

A vector of image information strings in format: “repository:tag|id|size”

§Errors

Returns DockerError::ListImagesFailed if the command fails

§Example
// List all images
let all_images = docker.list_images(None)?;

// List specific repository
let ubuntu_images = docker.list_images(Some("ubuntu"))?;
Source

pub fn list_containers(&self, all: bool) -> Result<Vec<String>, DockerError>

List Docker containers

Executes docker ps with formatting to get structured output.

§Arguments
  • all - If true, shows all containers (including stopped ones)
§Returns

A vector of container information strings in format: “id|name|status”

§Errors

Returns DockerError::ListContainersFailed if the command fails

§Example
// List only running containers
let running = docker.list_containers(false)?;

// List all containers
let all_containers = docker.list_containers(true)?;
Source

pub fn get_container_logs( &self, container_id: &str, ) -> Result<String, DockerError>

Get logs from a Docker container

Executes docker logs <container-id> to retrieve container logs.

§Arguments
  • container_id - ID or name of the container
§Returns

The container’s logs as a string

§Errors

Returns DockerError::GetLogsFailed if the command fails

§Example
let logs = docker.get_container_logs("my-container")?;
println!("Container logs:\n{}", logs);
Source

pub fn image_exists( &self, image_name: &str, image_tag: &str, ) -> Result<bool, DockerError>

Check if a Docker image exists locally

Uses list_images to check for the presence of a specific image.

§Arguments
  • image_name - Name of the image
  • image_tag - Tag of the image
§Returns

true if the image exists, false otherwise

§Errors

Returns DockerError::ListImagesFailed if the command fails

§Example
if docker.image_exists("ubuntu", "latest")? {
    println!("Ubuntu image is available");
}

Trait Implementations§

Source§

impl Debug for DockerClient

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for DockerClient

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<T> IntoResult<T> for T

Source§

type Err = !

Source§

fn into_result(self) -> Result<T, <T as IntoResult<T>>::Err>

Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more