ContainerConfig
- це клас для налаштування конфігурації контейнерів Docker. Він дозволяє встановлювати образ, ім’я, змінні середовища, команди, томи, порти, мітки та інші параметри контейнера.
Sangezar\DockerClient\Config
public static function create(): self
Створює новий екземпляр конфігурації контейнера.
ContainerConfig
public function setImage(string $image): self
Встановлює образ для контейнера.
$image
- Назва образу (з тегом)InvalidParameterValueException
- якщо назва образу порожняpublic function setName(string $name): self
Встановлює ім’я для контейнера.
$name
- Ім’я контейнераInvalidParameterValueException
- якщо ім’я неприпустимеpublic function addEnv(string $name, string $value): self
Додає змінну середовища.
$name
- Ім’я змінної$value
- Значення змінноїpublic function setCmd(array $cmd): self
Встановлює команду для запуску.
$cmd
- Команда у вигляді масиву аргументівpublic function addVolume(string $hostPath, string $containerPath, string $mode = 'rw'): self
Додає том.
$hostPath
- Шлях на хості$containerPath
- Шлях у контейнері$mode
- Режим доступу (‘ro’, ‘rw’)public function addPort(int $hostPort, int $containerPort, string $protocol = 'tcp'): self
Додає відображення порту.
$hostPort
- Порт на хості$containerPort
- Порт у контейнері$protocol
- Протокол (‘tcp’, ‘udp’)public function addLabel(string $name, string $value): self
Додає мітку.
$name
- Ім’я мітки$value
- Значення міткиpublic function toArray(): array
Перетворює конфігурацію в масив для Docker API.
InvalidConfigurationException
- якщо конфігурація неприпустимаpublic function setWorkingDir(string $dir): self
Встановлює робочий каталог для контейнера.
$dir
- Шлях до робочого каталогуpublic function setUser(string $user): self
Встановлює користувача для контейнера.
$user
- Ім’я користувача або UIDpublic function setNetworkMode(string $mode): self
Встановлює режим мережі для контейнера.
$mode - Режим мережі (‘bridge’, ‘host’, ‘none’, ‘container:[name |
id]’) |
public function addNetworkConnection(string $networkName, array $config = []): self
Додає підключення до мережі.
$networkName
- Ім’я мережі$config
- Конфігурація підключення (аліаси, IPAddress тощо)public function setTty(bool $enable = true): self
Встановлює опцію TTY.
$enable
- Увімкнути TTY (за замовчуванням true)public function setOpenStdin(bool $enable = true): self
Встановлює опцію відкриття stdin.
$enable
- Увімкнути відкриття stdin (за замовчуванням true)public function setMemoryLimit(int $memoryBytes): self
Встановлює обмеження пам’яті для контейнера.
$memoryBytes
- Кількість байт пам’ятіpublic function setCpuShares(int $cpuShares): self
Встановлює частку CPU для контейнера.
$cpuShares
- Частка CPU (відносний вага)public function setRestartPolicy(string $policy, int $maxRetryCount = 0): self
Встановлює політику перезапуску контейнера.
$policy
- Політика перезапуску (‘no’, ‘always’, ‘unless-stopped’, ‘on-failure’)$maxRetryCount
- Максимальна кількість спроб (для ‘on-failure’)InvalidParameterValueException
- якщо політика неприпустима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";