docker-php-client

Документація класу DockerCluster

Опис

DockerCluster - це клас, що представляє кластер серверів Docker. Він дозволяє керувати набором вузлів Docker, групувати їх за допомогою тегів та виконувати операції як на окремих вузлах, так і на групах вузлів.

Простір імен

Sangezar\DockerClient\Cluster

Константи

// Регулярний вираз для валідації імен вузлів
private const NODE_NAME_PATTERN = '/^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/';

// Регулярний вираз для валідації імен тегів
private const TAG_NAME_PATTERN = '/^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/';

Методи

addNode

public function addNode(string $name, DockerClient $client, array $tags = []): self

Додає новий вузол до кластера.

Параметри:

Повертає:

Винятки:

node

public function node(string $name): DockerClient

Повертає клієнт вузла за його іменем.

Параметри:

Повертає:

Винятки:

hasNode

public function hasNode(string $name): bool

Перевіряє, чи існує вузол з вказаним іменем.

Параметри:

Повертає:

removeNode

public function removeNode(string $name): self

Видаляє вузол з кластера.

Параметри:

Повертає:

Винятки:

getNodesByTag

public function getNodesByTag(string $tag): array

Повертає всі вузли з вказаним тегом.

Параметри:

Повертає:

Винятки:

addTagToNode

public function addTagToNode(string $nodeName, string $tag): self

Додає тег до існуючого вузла.

Параметри:

Повертає:

Винятки:

removeTagFromNode

public function removeTagFromNode(string $nodeName, string $tag): self

Видаляє тег з вузла.

Параметри:

Повертає:

Винятки:

getNodesByAllTags

public function getNodesByAllTags(array $tags): array

Повертає всі вузли, які мають всі вказані теги (операція І).

Параметри:

Повертає:

Винятки:

getNodesByAnyTag

public function getNodesByAnyTag(array $tags): array

Повертає всі вузли, які мають хоча б один з вказаних тегів (операція АБО).

Параметри:

Повертає:

Винятки:

filter

public function filter(callable $callback): NodeCollection

Повертає колекцію вузлів, відфільтровану за допомогою функції зворотного виклику.

Параметри:

Повертає:

all

public function all(): NodeCollection

Повертає колекцію всіх вузлів кластера.

Повертає:

byTag

public function byTag(string $tag): NodeCollection

Повертає колекцію вузлів з вказаним тегом.

Параметри:

Повертає:

byAllTags

public function byAllTags(array $tags): NodeCollection

Повертає колекцію вузлів, які мають всі вказані теги.

Параметри:

Повертає:

byAnyTag

public function byAnyTag(array $tags): NodeCollection

Повертає колекцію вузлів, які мають хоча б один з вказаних тегів.

Параметри:

Повертає:

addNodes

public function addNodes(array $nodes): self

Додає кілька вузлів до кластера.

Параметри:

Повертає:

Винятки:

getNodes

public function getNodes(): array

Повертає всі вузли кластера.

Повертає:

getTags

public function getTags(): array

Повертає всі теги кластера.

Повертає:

isEmpty

public function isEmpty(): bool

Перевіряє, чи кластер порожній.

Повертає:

count

public function count(): int

Підраховує кількість вузлів у кластері.

Повертає:

Приклади використання

Створення кластера та додавання вузлів

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

// Створення кластера
$cluster = new DockerCluster();

// Додавання вузлів з тегами
$cluster->addNode(
    'node1',
    DockerClient::createTcp('tcp://192.168.1.10:2375'),
    ['production', 'web']
);

$cluster->addNode(
    'node2',
    DockerClient::createTcp('tcp://192.168.1.11:2375'),
    ['production', 'database']
);

$cluster->addNode(
    'node3',
    DockerClient::createTcp('tcp://192.168.1.12:2375'),
    ['staging', 'web']
);

// Перевірка кількості вузлів
echo "Загальна кількість вузлів: " . $cluster->count() . "\n";

Отримання вузлів за тегами

// Отримання всіх вузлів з тегом 'production'
$productionNodes = $cluster->getNodesByTag('production');
echo "Вузли з тегом 'production': " . implode(', ', array_keys($productionNodes)) . "\n";

// Отримання вузлів, які мають обидва теги: 'production' та 'web'
$productionWebNodes = $cluster->getNodesByAllTags(['production', 'web']);
echo "Вузли з тегами 'production' та 'web': " . implode(', ', array_keys($productionWebNodes)) . "\n";

// Отримання вузлів, які мають тег 'production' або 'staging'
$allEnvNodes = $cluster->getNodesByAnyTag(['production', 'staging']);
echo "Вузли з тегами 'production' або 'staging': " . implode(', ', array_keys($allEnvNodes)) . "\n";

Виконання операцій на групі вузлів

// Отримання колекції вузлів за тегом і виконання операцій
$webNodesCollection = $cluster->byTag('web');

// Отримання списку всіх контейнерів на веб-вузлах
$containersMap = $webNodesCollection->containers()->list(['all' => true]);

foreach ($containersMap as $nodeName => $containers) {
    echo "Вузол: $nodeName\n";
    foreach ($containers as $container) {
        echo "  Контейнер: {$container['Names'][0]}\n";
    }
}

Керування тегами

// Додавання тегу до вузла
$cluster->addTagToNode('node3', 'monitoring');

// Видалення тегу з вузла
$cluster->removeTagFromNode('node2', 'production');

// Перевірка наявності вузла
if ($cluster->hasNode('node1')) {
    echo "Вузол 'node1' існує\n";
    
    // Виконання операцій на окремому вузлі
    $node1Client = $cluster->node('node1');
    $containers = $node1Client->container()->list(['all' => true]);
    echo "Кількість контейнерів на вузлі 'node1': " . count($containers) . "\n";
}