docker-php-client

ContainerOperations Class Documentation

Description

ContainerOperations is a class that provides functionality for performing operations with Docker containers on all cluster nodes simultaneously. This class extends AbstractOperations and allows you to get a list of containers, create, start, stop, restart, and delete containers on all cluster nodes.

Namespace

Sangezar\DockerClient\Cluster\Operations

Inheritance

The class extends AbstractOperations and inherits all its methods and properties.

Methods

list

public function list(array $parameters = []): array

Gets a list of containers from all cluster nodes.

Parameters:

Returns:

Exceptions:

create

public function create(ContainerConfig $config): array

Creates a container on all cluster nodes.

Parameters:

Returns:

Exceptions:

inspect

public function inspect(string $containerId): array

Gets detailed information about a container on all cluster nodes.

Parameters:

Returns:

Exceptions:

start

public function start(string $containerId): array

Starts a container on all cluster nodes.

Parameters:

Returns:

Exceptions:

stop

public function stop(string $containerId, int $timeout = 10): array

Stops a container on all cluster nodes.

Parameters:

Returns:

Exceptions:

restart

public function restart(string $containerId, int $timeout = 10): array

Restarts a container on all cluster nodes.

Parameters:

Returns:

Exceptions:

remove

public function remove(string $containerId, bool $force = false, bool $removeVolumes = false): array

Removes a container on all cluster nodes.

Parameters:

Returns:

Exceptions:

logs

public function logs(string $containerId, array $parameters = []): array

Gets container logs from all cluster nodes.

Parameters:

Returns:

Exceptions:

stats

public function stats(string $containerId, bool $stream = false): array

Gets container resource usage statistics on all cluster nodes.

Parameters:

Returns:

Exceptions:

exists

public function exists(string $containerId): array

Checks if a container exists on all cluster nodes.

Parameters:

Returns:

Exceptions:

existsOnAllNodes

public function existsOnAllNodes(string $containerId): bool

Checks if a container exists on all cluster nodes.

Parameters:

Returns:

Exceptions:

getNodesWithContainer

public function getNodesWithContainer(string $containerId): array

Gets a list of nodes where the container exists.

Parameters:

Returns:

Exceptions:

Usage Examples

Getting a List of Containers from All Nodes

use Sangezar\DockerClient\Cluster\DockerCluster;
use Sangezar\DockerClient\DockerClient;

// Creating a cluster
$cluster = new DockerCluster();
$cluster->addNode('node1', DockerClient::createTcp('tcp://192.168.1.10:2375'));
$cluster->addNode('node2', DockerClient::createTcp('tcp://192.168.1.11:2375'));

// Getting a list of all containers
$containers = $cluster->node('node1')->containers()->list(['all' => true]);

// Checking results
foreach ($containers as $nodeName => $result) {
    echo "Containers on node $nodeName:\n";
    foreach ($result as $container) {
        echo "  - {$container['Names'][0]} (ID: {$container['Id']})\n";
    }
}

Creating and Starting a Container on All Nodes

use Sangezar\DockerClient\Config\ContainerConfig;
use Sangezar\DockerClient\Cluster\NodeCollection;
use Sangezar\DockerClient\DockerClient;

// Creating a node collection
$nodes = [
    'node1' => DockerClient::createTcp('tcp://192.168.1.10:2375'),
    'node2' => DockerClient::createTcp('tcp://192.168.1.11:2375'),
];
$collection = new NodeCollection($nodes);

// Creating container configuration
$config = ContainerConfig::create()
    ->setImage('nginx:latest')
    ->setName('test-nginx')
    ->exposePorts(80, 443);

// Creating a container on all nodes
$results = $collection->containers()->create($config);

// Starting a container on all nodes
$startResults = $collection->containers()->start('test-nginx');

Checking Container Existence on Nodes

// Checking if the container exists on all nodes
$exists = $collection->containers()->existsOnAllNodes('test-nginx');
if ($exists) {
    echo "Container 'test-nginx' exists on all nodes\n";
} else {
    // Getting a list of nodes where the container exists
    $nodesWithContainer = $collection->containers()->getNodesWithContainer('test-nginx');
    echo "Container 'test-nginx' exists only on nodes: " . implode(', ', $nodesWithContainer) . "\n";
}

// Stopping and removing the container
$collection->containers()->stop('test-nginx');
$collection->containers()->remove('test-nginx', true);