NodeCollection
- це клас, що представляє колекцію вузлів Docker для виконання операцій у кластері. Він дозволяє виконувати однакові операції на декількох Docker-вузлах одночасно.
Sangezar\DockerClient\Cluster
public function __construct(array $nodes)
Створює нову колекцію вузлів.
$nodes
- Асоціативний масив вузлів, де ключі - імена вузлів, а значення - екземпляри DockerClient
public function containers(): ContainerOperations
Отримує об’єкт для роботи з контейнерами на всіх вузлах колекції.
ContainerOperations
для роботи з контейнерамиpublic function images(): ImageOperations
Отримує об’єкт для роботи з образами на всіх вузлах колекції.
ImageOperations
для роботи з образамиpublic function networks(): NetworkOperations
Отримує об’єкт для роботи з мережами на всіх вузлах колекції.
NetworkOperations
для роботи з мережамиpublic function volumes(): VolumeOperations
Отримує об’єкт для роботи з томами на всіх вузлах колекції.
VolumeOperations
для роботи з томамиpublic function system(): SystemOperations
Отримує об’єкт для роботи з системними функціями на всіх вузлах колекції.
SystemOperations
для роботи з системними функціямиpublic function filter(callable $callback): self
Фільтрує вузли в колекції за допомогою функції зворотного виклику.
$callback
- Функція-колбек для фільтрації, яка приймає вузол як аргумент і повертає булеве значенняNodeCollection
з відфільтрованими вузламиpublic function getNodes(): array
Отримує всі вузли в колекції.
DockerClient
public function count(): int
Підраховує кількість вузлів у колекції.
public function isEmpty(): bool
Перевіряє, чи колекція порожня.
true
, якщо колекція не містить вузлів, false
- якщо міститьuse Sangezar\DockerClient\DockerClient;
use Sangezar\DockerClient\Cluster\NodeCollection;
// Створення клієнтів Docker для різних вузлів
$node1 = DockerClient::createTcp('tcp://192.168.1.10:2375');
$node2 = DockerClient::createTcp('tcp://192.168.1.11:2375');
// Створення колекції вузлів
$nodes = [
'node1' => $node1,
'node2' => $node2,
];
$collection = new NodeCollection($nodes);
// Отримання списку контейнерів на всіх вузлах
$containersMap = $collection->containers()->list(['all' => true]);
// Результат - масив, де ключі - імена вузлів, а значення - масиви контейнерів
foreach ($containersMap as $nodeName => $containers) {
echo "Вузол: $nodeName\n";
foreach ($containers as $container) {
echo " Контейнер: {$container['Names'][0]}\n";
}
}
use Sangezar\DockerClient\DockerClient;
use Sangezar\DockerClient\Cluster\NodeCollection;
// Створення колекції вузлів
$nodes = [
'node1' => DockerClient::createTcp('tcp://192.168.1.10:2375'),
'node2' => DockerClient::createTcp('tcp://192.168.1.11:2375'),
'node3' => DockerClient::createTcp('tcp://192.168.1.12:2375'),
];
$collection = new NodeCollection($nodes);
// Фільтрація вузлів за ім'ям
$filteredCollection = $collection->filter(function ($client, $name) {
return strpos($name, 'node1') === 0 || strpos($name, 'node2') === 0;
});
// Перевірка кількості вузлів після фільтрації
echo "Кількість вузлів після фільтрації: " . $filteredCollection->count() . "\n";
// Виконання операцій тільки на відфільтрованих вузлах
$imagesMap = $filteredCollection->images()->list();