docker-php-client

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

Опис

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

Простір імен

Sangezar\DockerClient\Config

Методи

create

public static function create(): self

Створює новий екземпляр конфігурації контейнера.

Повертає:

setImage

public function setImage(string $image): self

Встановлює образ для контейнера.

Параметри:

Повертає:

Винятки:

setName

public function setName(string $name): self

Встановлює ім’я для контейнера.

Параметри:

Повертає:

Винятки:

addEnv

public function addEnv(string $name, string $value): self

Додає змінну середовища.

Параметри:

Повертає:

setCmd

public function setCmd(array $cmd): self

Встановлює команду для запуску.

Параметри:

Повертає:

addVolume

public function addVolume(string $hostPath, string $containerPath, string $mode = 'rw'): self

Додає том.

Параметри:

Повертає:

addPort

public function addPort(int $hostPort, int $containerPort, string $protocol = 'tcp'): self

Додає відображення порту.

Параметри:

Повертає:

addLabel

public function addLabel(string $name, string $value): self

Додає мітку.

Параметри:

Повертає:

toArray

public function toArray(): array

Перетворює конфігурацію в масив для Docker API.

Повертає:

Винятки:

setWorkingDir

public function setWorkingDir(string $dir): self

Встановлює робочий каталог для контейнера.

Параметри:

Повертає:

setUser

public function setUser(string $user): self

Встановлює користувача для контейнера.

Параметри:

Повертає:

setNetworkMode

public function setNetworkMode(string $mode): self

Встановлює режим мережі для контейнера.

Параметри:

Повертає:

addNetworkConnection

public function addNetworkConnection(string $networkName, array $config = []): self

Додає підключення до мережі.

Параметри:

Повертає:

setTty

public function setTty(bool $enable = true): self

Встановлює опцію TTY.

Параметри:

Повертає:

setOpenStdin

public function setOpenStdin(bool $enable = true): self

Встановлює опцію відкриття stdin.

Параметри:

Повертає:

setMemoryLimit

public function setMemoryLimit(int $memoryBytes): self

Встановлює обмеження пам’яті для контейнера.

Параметри:

Повертає:

setCpuShares

public function setCpuShares(int $cpuShares): self

Встановлює частку CPU для контейнера.

Параметри:

Повертає:

setRestartPolicy

public function setRestartPolicy(string $policy, int $maxRetryCount = 0): self

Встановлює політику перезапуску контейнера.

Параметри:

Повертає:

Винятки:

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

Створення базової конфігурації

use Sangezar\DockerClient\Config\ContainerConfig;

// Створення конфігурації контейнера
$config = ContainerConfig::create()
    ->setImage('nginx:latest')
    ->setName('my-nginx')
    ->addEnv('NGINX_HOST', 'example.com')
    ->addEnv('NGINX_PORT', '80')
    ->addPort(8080, 80)
    ->addPort(8443, 443, 'tcp');

Налаштування томів та міток

use Sangezar\DockerClient\Config\ContainerConfig;

$config = ContainerConfig::create()
    ->setImage('php:8.2-fpm')
    ->setName('php-app');

// Додавання томів
$config->addVolume('/local/path/app', '/var/www/app', 'rw')
       ->addVolume('/local/path/config', '/etc/nginx/conf.d', 'ro');

// Додавання міток
$config->addLabel('com.example.environment', 'production')
       ->addLabel('com.example.version', '1.0.0')
       ->addLabel('maintainer', 'team@example.com');

Налаштування ресурсів та мережі

use Sangezar\DockerClient\Config\ContainerConfig;

$config = ContainerConfig::create()
    ->setImage('mysql:8.0')
    ->setName('db-server');

// Налаштування ресурсів
$config->setMemoryLimit(512 * 1024 * 1024) // 512 МБ
       ->setCpuShares(512)
       ->setRestartPolicy('always');

// Налаштування мережі
$config->setNetworkMode('bridge')
       ->addNetworkConnection('app-network', [
           'Aliases' => ['database', 'mysql'],
           'IPAddress' => '172.18.0.10'
       ]);

Налаштування користувача та робочого каталогу

use Sangezar\DockerClient\Config\ContainerConfig;

$config = ContainerConfig::create()
    ->setImage('node:18')
    ->setName('node-app')
    ->setUser('node')
    ->setWorkingDir('/app')
    ->setCmd(['npm', 'start'])
    ->setTty(true)
    ->setOpenStdin(true);

// Перетворення конфігурації в масив для Docker API
$apiConfig = $config->toArray();

Комплексний приклад

use Sangezar\DockerClient\Config\ContainerConfig;
use Sangezar\DockerClient\DockerClient;

// Створення клієнта Docker
$client = DockerClient::createUnix();

// Створення конфігурації контейнера
$config = ContainerConfig::create()
    ->setImage('wordpress:latest')
    ->setName('my-wordpress')
    ->addEnv('WORDPRESS_DB_HOST', 'db-server')
    ->addEnv('WORDPRESS_DB_USER', 'wordpress')
    ->addEnv('WORDPRESS_DB_PASSWORD', 'secret')
    ->addPort(8000, 80)
    ->addVolume('/local/path/wordpress', '/var/www/html', 'rw')
    ->setRestartPolicy('unless-stopped')
    ->setNetworkMode('bridge')
    ->addNetworkConnection('wordpress-network');

// Створення контейнера
$container = $client->container()->create($config);
echo "Контейнер створено з ID: " . $container['Id'] . "\n";

// Запуск контейнера
$client->container()->start($container['Id']);
echo "Контейнер запущено\n";