theod02/castor-docker-runner

Castor的Docker运行器(此运行器将用于在Docker容器中运行Castor或在内容器中运行相同的命令)

安装: 3

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

类型:castor-project

dev-master 2024-06-06 17:10 UTC

This package is auto-updated.

Last update: 2024-09-06 17:38:47 UTC


README

castor-docker-runner 是一个PHP库,旨在简化命令的执行,尤其是在Docker容器内。此库与Castor项目兼容。

目录

安装

要安装此库,请使用以下Composer命令

castor composer require castor/castor-docker-runner

用法

RunnerTrait

RunnerTrait 提供了执行命令的方法。它作为运行命令的构建器。以下是如何使用它的示例

use Castor\Runner\RunnerTrait;

class MyRunner
{
    use RunnerTrait;
    
    public function getBaseCommand()
    {
        return 'composer'
    }
}

$runner = new MyRunner();
$runner->add('install')->run(); // Run the command "composer install"

DockerRunnerTrait

DockerRunnerTrait 提供了在Docker容器中执行命令的方法。它添加了构建带有Docker选项的命令的方法。以下是如何使用它的示例

use Castor\Runner\DockerRunnerTrait;

class SymfonyRunner
{
    use RunnerTrait {
        RunnerTrait::__construct as private __runnerTraitConstruct;
        RunnerTrait::runCommand as private __runCommand;
    }
    use DockerRunnerTrait;

    public function __construct(?Context $castorContext = null)
    {
        $this->__runnerTraitConstruct($castorContext);
    }

    protected function getBaseCommand(): array
    {
        return ['php', 'bin/console'];
    }

    public function getContainerDefinition(): ContainerDefinition
    {
        return new ContainerDefinition(
            composeName: 'my-container-compose-name',
            name: 'my-container-name',
            workingDirectory: '/app',
            user: 'www-data',
            envs: [],
        );
    }
}

$sfRunner = new SymfonyRunner();

$sfRunner
    ->add('cache:clear')
    ->add('--env', 'prod')
    ->run(); // Run the command "docker-compose exec -T my-container-compose-name php bin/console cache:clear --env=prod"

DockerRunnerTrait 在在不同的环境中运行脚本时提供了显著的优势。它允许您在Docker容器内执行命令,并智能地确定脚本是从主机还是从Docker容器内运行的。

当脚本从主机运行时,命令将使用 docker exec 在Docker容器中执行。例如,如果您从主机运行脚本,它将执行以下命令

docker exec -it --workdir /app --user www-data my-container-name php bin/console cache:clear --env=prod

然而,如果脚本是从Docker容器内运行的,命令将直接在容器中执行,无需使用 docker exec。在这种情况下,将执行以下命令

php bin/console cache:clear --env=prod

此功能简化了命令执行过程,使您的代码更简洁、更易于维护。如果没有此库,您将不得不手动检查脚本是否在Docker容器内运行,然后相应地构建命令,如下面的示例所示

$runningInDocker = file_exists('/.dockerenv');

if ($runningInDocker) {
    $command = ['php', 'bin/console', 'cache:clear', '--env=prod'];
} else {
    $command = ['docker', 'exec', '-it', '--workdir', '/app', '--user', 'www-data', 'my-container-name', 'php', 'bin/console', 'cache:clear', '--env=prod'];
}

run($command);

使用 DockerRunnerTrait,此过程被抽象化,使您能够专注于应用程序的逻辑,而不是命令执行的细节。

API参考

  • RunnerTrait:此特性提供执行命令的方法。
  • DockerRunnerTrait:此特性提供在Docker容器内执行命令的方法。
  • DockerRunner:此类使用 RunnerTrait 执行Docker命令。
  • DockerUtils:此类提供Docker的实用方法,例如检查当前环境是否在Docker容器内,检查某些Docker容器是否正在运行,检查Docker镜像是否存在,以及检查Docker网络是否存在。

贡献

如果您想为此项目做出贡献,请随意fork存储库,进行更改,并提交拉取请求。