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_.-]*$/';
public function addNode(string $name, DockerClient $client, array $tags = []): self
Додає новий вузол до кластера.
$name - Унікальне ім’я вузла$client - Клієнт Docker API$tags - Масив тегів для категоризації вузла (за замовчуванням порожній масив)DockerCluster (для ланцюжкових викликів)ValidationException - якщо ім’я вузла неприпустиме або вже існуєpublic function node(string $name): DockerClient
Повертає клієнт вузла за його іменем.
$name - Ім’я вузлаDockerClient для вказаного вузлаNodeNotFoundException - якщо вузол не знайденоValidationException - якщо ім’я вузла порожнєpublic function hasNode(string $name): bool
Перевіряє, чи існує вузол з вказаним іменем.
$name - Ім’я вузлаtrue, якщо вузол існує, false - якщо ніpublic function removeNode(string $name): self
Видаляє вузол з кластера.
$name - Ім’я вузлаDockerCluster (для ланцюжкових викликів)ValidationException - якщо ім’я вузла порожнєpublic function getNodesByTag(string $tag): array
Повертає всі вузли з вказаним тегом.
$tag - Тег для фільтраціїValidationException - якщо тег неприпустимийpublic function addTagToNode(string $nodeName, string $tag): self
Додає тег до існуючого вузла.
$nodeName - Ім’я вузла$tag - Тег для додаванняDockerCluster (для ланцюжкових викликів)NodeNotFoundException - якщо вузол не знайденоValidationException - якщо тег неприпустимий або ім’я вузла порожнєpublic function removeTagFromNode(string $nodeName, string $tag): self
Видаляє тег з вузла.
$nodeName - Ім’я вузла$tag - Тег для видаленняDockerCluster (для ланцюжкових викликів)NodeNotFoundException - якщо вузол не знайденоValidationException - якщо ім’я вузла порожнєpublic function getNodesByAllTags(array $tags): array
Повертає всі вузли, які мають всі вказані теги (операція І).
$tags - Масив тегівValidationException - якщо будь-який тег неприпустимийpublic function getNodesByAnyTag(array $tags): array
Повертає всі вузли, які мають хоча б один з вказаних тегів (операція АБО).
$tags - Масив тегівValidationException - якщо будь-який тег неприпустимийpublic function filter(callable $callback): NodeCollection
Повертає колекцію вузлів, відфільтровану за допомогою функції зворотного виклику.
$callback - Функція-колбек для фільтрації, яка приймає вузол як аргумент і повертає булеве значенняNodeCollection з відфільтрованими вузламиpublic function all(): NodeCollection
Повертає колекцію всіх вузлів кластера.
NodeCollection з усіма вузламиpublic function byTag(string $tag): NodeCollection
Повертає колекцію вузлів з вказаним тегом.
$tag - Тег для фільтраціїNodeCollection з вузлами, які мають вказаний тегpublic function byAllTags(array $tags): NodeCollection
Повертає колекцію вузлів, які мають всі вказані теги.
$tags - Масив тегівNodeCollection з вузлами, які мають всі вказані тегиpublic function byAnyTag(array $tags): NodeCollection
Повертає колекцію вузлів, які мають хоча б один з вказаних тегів.
$tags - Масив тегівNodeCollection з вузлами, які мають хоча б один з вказаних тегівpublic function addNodes(array $nodes): self
Додає кілька вузлів до кластера.
$nodes - Масив вузлів для додавання, де ключі:
name (string) - Ім’я вузлаclient (DockerClient) - Клієнт Docker APItags (array, необов’язковий) - Масив тегівDockerCluster (для ланцюжкових викликів)addNodepublic function getNodes(): array
Повертає всі вузли кластера.
DockerClientpublic function getTags(): array
Повертає всі теги кластера.
public function isEmpty(): bool
Перевіряє, чи кластер порожній.
true, якщо в кластері немає вузлів, false - якщо є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";
}