PHP code example of blues-mr / docker-php-sdk

1. Go to this page and download the library: Download blues-mr/docker-php-sdk library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

blues-mr / docker-php-sdk example snippets




use Docker\API\DockerClient;
use Docker\API\Model\Container\ContainerCreateRequest;

// 创建Docker客户端
$docker = new DockerClient();

// 测试连接
if ($docker->ping()) {
    echo "成功连接到Docker守护进程\n";
}

// 获取系统信息
$info = $docker->system()->info();
echo "Docker版本: " . $info['ServerVersion'] . "\n";

// 列出容器
$containers = $docker->containers()->list();
foreach ($containers as $container) {
    echo "容器: " . $container['Names'][0] . "\n";
}

// 创建并启动容器
$createRequest = new ContainerCreateRequest('nginx:latest');
$createRequest->addEnv('NGINX_HOST', 'localhost');

$result = $docker->containers()->create($createRequest, 'my-nginx');
$docker->containers()->start($result['Id']);

$docker = new DockerClient(); // 默认使用 unix:///var/run/docker.sock
// 或者
$docker = new DockerClient('unix:///var/run/docker.sock');

$docker = new DockerClient('http://localhost:2376');
// 或者HTTPS
$docker = new DockerClient('https://localhost:2376');

$docker = new DockerClient('unix:///var/run/docker.sock', [
    'timeout' => 120,
    'connect_timeout' => 30,
    'headers' => [
        'User-Agent' => 'MyApp/1.0'
    ]
]);

use Docker\API\Exception\DockerException;
use Docker\API\Exception\ClientException;
use Docker\API\Exception\ServerException;

try {
    $containers = $docker->containers()->list();
} catch (ClientException $e) {
    // 4xx错误 (客户端错误)
    echo "客户端错误: " . $e->getMessage();
} catch (ServerException $e) {
    // 5xx错误 (服务器错误)
    echo "服务器错误: " . $e->getMessage();
} catch (DockerException $e) {
    // 其他Docker API错误
    echo "Docker错误: " . $e->getMessage();
}

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

$logger = new Logger('docker');
$logger->pushHandler(new StreamHandler('docker.log', Logger::DEBUG));

$docker = new DockerClient('unix:///var/run/docker.sock', [], $logger);

$buildStream = $docker->images()->build($dockerfile, ['tag' => 'myapp:latest']);

while (!$buildStream->eof()) {
    $line = $buildStream->read(1024);
    echo $line;
}

use Docker\API\Model\Container\ContainerCreateRequest;

$request = new ContainerCreateRequest('nginx:latest');
$request
    ->setHostname('web-server')
    ->setUser('www-data')
    ->addEnv('NGINX_HOST', 'example.com')
    ->addEnv('NGINX_PORT', '80')
    ->setCmd(['nginx', '-g', 'daemon off;'])
    ->setWorkingDir('/var/www/html')
    ->setExposedPorts(['80/tcp', '443/tcp'])
    ->addLabel('app', 'web')
    ->addLabel('version', '1.0')
    ->setVolumes(['/var/www/html'])
    ->setTty(true)
    ->setOpenStdin(true);

$result = $docker->containers()->create($request, 'my-web-server');

use Docker\API\Model\Container\ContainerUpdateRequest;

$updateRequest = new ContainerUpdateRequest();
$updateRequest
    ->setMemory(512 * 1024 * 1024) // 512MB
    ->setCpuShares(512)
    ->setMemorySwap(-1); // 无限制

$docker->containers()->update('container-id', $updateRequest);