utopia-php / orchestration
轻量级且快速的 PHP 容器编排微抽象库
Requires
- php: >=8.0
- utopia-php/cli: 0.19.*
Requires (Dev)
- laravel/pint: ^1.2
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.3
- dev-main
- 0.15.0
- 0.15.0-RC1
- 0.14.x-dev
- 0.14.0
- 0.13.4
- 0.13.3
- 0.13.2
- 0.13.1
- 0.13.0
- 0.12.0
- 0.11.0
- 0.10.x-dev
- 0.10.2
- 0.10.1
- 0.10.0
- 0.9.1
- 0.9.0
- 0.8.1
- 0.8.0
- 0.7.0
- 0.6.0
- 0.5.0
- 0.4.1
- 0.4.0
- 0.3.0
- 0.2.1
- 0.2.0
- dev-PLA-1644
- dev-chore-package-update
- dev-chore-upgrade-utopia-cli
- dev-fix-docker-api
- dev-fix-docker-API-metrics
- dev-chore-add-command-to-run-tests
- dev-fix-swoole-headers-bug
- dev-fix-command-escaping
- dev-fix-tests
- dev-feat-eldad-test2
- dev-feat-run-with-network
- dev-update-deps
- dev-feat-runitime-hosts
- dev-promote-new-cli-version
- dev-feat-remove-averaging-logic
- dev-qa-fix
- dev-feat-usage-stats
- dev-feat-add-code-examples
- dev-feat-fix-swap-error
- dev-dev-3
- dev-dev
This package is auto-updated.
Last update: 2024-09-19 14:18:07 UTC
README
Utopia 框架编排库是一个简单且轻量级的库,用于抽象与多个容器编排器的交互。这个库旨在尽可能简单且易于学习和使用。该库由 Appwrite 团队 维护。
尽管这个库是 Utopia 框架 项目的组成部分,但它不依赖任何其他库,可以作为独立库用于任何其他 PHP 项目或框架。
入门指南
使用 composer 安装
composer require utopia-php/orchestration
示例
<?php require_once 'vendor/autoload.php'; use Utopia\Orchestration\Orchestration; use Utopia\Orchestration\Adapter\DockerCLI; // Initialise Orchestration with Docker CLI adapter. $orchestration = new Orchestration(new DockerCLI()); // Pull the image. $orchestration->pull('ubuntu:latest'); // Launch a ubuntu container that doesn't end using the tail command. $containerID = $orchestration->run('ubuntu:latest', 'testContainer', ['tail', '-f', '/dev/null']); $stderr = ''; $stdout = ''; // Execute a hello world command in the container $orchestration->execute($containerID, ['echo', 'Hello World!'], $stdout, $stderr); // Remove the container forcefully since it's still running. $orchestration->remove($containerID, true);
使用方法
初始化
目前有两种编排器适配器可用,每个适配器都有略微不同的参数
-
DockerAPI
直接通过 Docker UNIX 套接字与 Docker 守护进程通信。
use Utopia\Orchestration\Orchestration; use Utopia\Orchestration\Adapter\DockerAPI; $orchestration = new Orchestration(new DockerAPI($username, $password, $email));
$username, $password 和 $email 是可选的,仅用于从 Docker Hub 拉取私有镜像。
-
DockerCLI
使用 Docker CLI 与 Docker 守护进程通信。
use Utopia\Orchestration\Orchestration; use Utopia\Orchestration\Adapter\DockerCLI; $orchestration = new Orchestration(new DockerCLI($username, $password));
$username 和 $password 是可选的,仅用于从 Docker Hub 拉取私有镜像。
初始化您的编排对象后,可以使用以下方法
-
拉取镜像
此方法从编排器的仓库中拉取请求的镜像。它将返回一个布尔值,指示镜像是否成功拉取。
$orchestration->pull('image:tag');
参数
-
image
[String] [Required]从仓库中拉取的镜像。
-
-
运行容器
此方法创建并运行一个新的容器。成功时,它将返回一个包含容器 ID 的字符串。失败时,将抛出异常。
$orchestration->run( 'image:tag', 'name', ['echo', 'hello world!'], 'entrypoint', 'workdir', ['tmp:/tmp:rw', 'cooldirectory:/home/folder:rw'], ['ENV_VAR' => 'value'], '/tmp', ['label' => 'value'], 'hostname', true, );
参数
-
image
[String] [Required]基于容器构建的镜像。
-
name
[String] [Required]容器的名称。
-
command
[Array]在容器中运行的命令,以数组形式分开。
-
entrypoint
[String]在容器中运行的执行文件。
-
workdir
[String]容器命令运行的默认目录。
-
volumes
[Array]附加到容器的卷。
-
env
[Array]在容器中设置的环境变量。
-
mountFolder
[String]将自动挂载到容器中的 /tmp 的文件夹。
-
labels
[Array]在容器上设置的标签。
-
hostname
[String]在容器上设置的主机名。
-
remove
[Boolean]容器退出后是否删除容器。
-
-
在运行中的容器中执行命令
此方法在已运行的容器中执行命令并返回一个布尔值,指示命令是否成功执行。
$stdout = ''; $stderr = ''; $orchestraton->execute( 'container_id', ['echo', 'Hello World!'], $stdout, $stderr, ['VAR' => 'VALUE'], 10, )
参数
-
container_id
[String] [Required]执行命令的容器的 ID。
-
command
[Array] [Required]在容器中执行的命令。
-
stdout
[String] [Reference]存储命令的 stdout 的变量。
-
stderr
[String] [Reference]存储命令的 stderr 的变量。
-
env
[Array]执行命令时设置的环境变量。
-
timeout
[Integer]等待命令完成的秒数。
-
-
删除容器
此方法删除一个容器,并返回一个布尔值,表示容器是否成功删除。
$orchestration->remove('container_id', true);
参数
-
container_id
[String] [Required]要删除的容器的ID。
-
force
[布尔型]是否强制删除容器。
-
-
列出容器
此方法返回一个容器数组。
$orchestration->list(['label' => 'value']);
参数
-
filters
[数组]应用于容器列表的过滤器。
-
-
列出网络
此方法返回一个网络数组。
$orchestration->listNetworks();
参数
此方法没有参数
-
创建网络
此方法创建一个新的网络,并返回一个布尔值,表示网络是否成功创建。
$orchestration->createNetwork('name', false);
参数
-
name
[String] [Required]网络的名称。
-
internal
[布尔型]是否将网络设置为内部网络。
-
-
删除网络
此方法删除网络,并返回一个布尔值,表示网络是否成功删除。
$orchestration->removeNetwork('network_id');
参数
-
network_id
[字符串] [必需]要删除的网络ID。
-
-
将容器连接到网络
此方法将容器连接到网络,并返回一个布尔值,表示连接是否成功。
$orchestration->connect('container_id', 'network_id');
参数
-
container_id
[String] [Required]要连接到网络的容器的ID。
-
network_id
[字符串] [必需]要连接的网络ID。
-
-
从网络断开容器连接
此方法从网络断开容器连接,并返回一个布尔值,表示删除是否成功。
$orchestration->disconnect('container_id', 'network_id', false);
参数
-
container_id
[String] [Required]要断开连接的容器的ID。
-
network_id
[字符串] [必需]要断开连接的网络ID。
-
force
[布尔型]是否强制断开容器连接。
-
系统要求
Utopia框架要求PHP 7.3或更高版本。建议尽可能使用最新的PHP版本。
版权和许可
MIT许可(MIT) http://www.opensource.org/licenses/mit-license.php