blues-mr / docker-php-sdk
Docker Engine API v1.45 PHP SDK Client
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/blues-mr/docker-php-sdk
Requires
- php: >=8.1
- guzzlehttp/guzzle: ^7.0
- psr/http-message: ^1.0
- psr/log: ^3.0
- symfony/property-access: ^6.0
- symfony/serializer: ^6.0
Requires (Dev)
- mockery/mockery: ^1.5
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^10.0
- squizlabs/php_codesniffer: ^3.0
README
一个功能完整、生产级别的 PHP SDK,用于与 Docker Engine API v1.45 进行交互。
特性
- ✅ 完整实现 Docker Engine API v1.45 的所有接口
- ✅ 支持 Unix Socket 和 TCP 连接
- ✅ 类型安全的请求/响应模型
- ✅ 完善的错误处理
- ✅ 流式响应支持
- ✅ PSR-3 日志接口支持
- ✅ 高可用性和生产级别的代码质量
安装
composer require docker/engine-api-sdk
快速开始
<?php 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']);
支持的 API
容器操作 (Container)
list()- 列出容器create()- 创建容器inspect()- 检查容器top()- 列出容器内进程logs()- 获取容器日志changes()- 获取文件系统变更export()- 导出容器stats()- 获取容器统计信息resize()- 调整 TTY 大小start()- 启动容器stop()- 停止容器restart()- 重启容器kill()- 杀死容器update()- 更新容器rename()- 重命名容器pause()- 暂停容器unpause()- 恢复容器attach()- 附加到容器wait()- 等待容器remove()- 删除容器getArchiveInfo()- 获取归档信息getArchive()- 获取归档putArchive()- 上传归档prune()- 清理停止的容器
镜像操作 (Image)
list()- 列出镜像build()- 构建镜像buildPrune()- 清理构建缓存create()- 创建镜像(拉取)inspect()- 检查镜像history()- 获取镜像历史push()- 推送镜像tag()- 标记镜像remove()- 删除镜像search()- 搜索镜像prune()- 清理未使用镜像commit()- 提交容器为镜像export()- 导出镜像exportMultiple()- 导出多个镜像import()- 导入镜像
网络操作 (Network)
list()- 列出网络inspect()- 检查网络remove()- 删除网络create()- 创建网络connect()- 连接容器到网络disconnect()- 断开容器网络连接prune()- 清理未使用网络
卷操作 (Volume)
list()- 列出卷create()- 创建卷inspect()- 检查卷remove()- 删除卷prune()- 清理未使用卷
系统操作 (System)
auth()- 验证配置info()- 获取系统信息version()- 获取版本信息ping()- Ping 守护进程events()- 监控事件df()- 获取数据使用情况
执行操作 (Exec)
create()- 创建执行实例start()- 启动执行实例resize()- 调整执行实例 TTYinspect()- 检查执行实例
Swarm 操作
inspect()- 检查 Swarminit()- 初始化 Swarmjoin()- 加入 Swarmleave()- 离开 Swarmupdate()- 更新 Swarmunlockkey()- 获取解锁密钥unlock()- 解锁 Swarm
节点操作 (Node)
list()- 列出节点inspect()- 检查节点delete()- 删除节点update()- 更新节点
服务操作 (Service)
list()- 列出服务create()- 创建服务inspect()- 检查服务delete()- 删除服务update()- 更新服务logs()- 获取服务日志
任务操作 (Task)
list()- 列出任务inspect()- 检查任务logs()- 获取任务日志
密钥操作 (Secret)
list()- 列出密钥create()- 创建密钥inspect()- 检查密钥delete()- 删除密钥update()- 更新密钥
配置操作 (Config)
list()- 列出配置create()- 创建配置inspect()- 检查配置delete()- 删除配置update()- 更新配置
插件操作 (Plugin)
list()- 列出插件getPrivileges()- 获取插件权限pull()- 拉取插件inspect()- 检查插件remove()- 删除插件enable()- 启用插件disable()- 禁用插件upgrade()- 升级插件create()- 创建插件push()- 推送插件configure()- 配置插件
连接配置
Unix Socket 连接 (默认)
$docker = new DockerClient(); // 默认使用 unix:///var/run/docker.sock // 或者 $docker = new DockerClient('unix:///var/run/docker.sock');
TCP 连接
$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);
流式响应
某些 API 返回流式响应,如构建镜像、拉取镜像等:
$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);
要求
- PHP 8.1+
- ext-json
- ext-curl
许可证
MIT License
贡献
欢迎提交 Issue 和 Pull Request!
支持
如果您在使用过程中遇到问题,请:
- 查看示例代码
- 查看Docker API 文档
- 提交 Issue
更新日志
v1.0.0
- 初始版本
- 完整实现 Docker Engine API v1.45
- 支持所有 API 端点
- 生产级别的错误处理和日志记录