utopia-php/orchestration

轻量级且快速的 PHP 容器编排微抽象库


README

Build Status Total Downloads Discord

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