alvar01o/docker
Composer 安装命令:
composer require alvar01o/docker
包简介
Run a docker container in your PHPUnit tests
README 文档
README
This package is a fork from spatie/docker and provides a nice way to start docker containers, docker-compose commands.
$containerInstance = DockerContainer::create($imageName)->start(); $process = $containerInstance->execute('whoami'); $process->getOutput(); // returns the name of the user inside the docker container
Installation
You can install the package via composer:
composer require alvar01o/docker
Usage
You can get an instance of a docker container using
$containerInstance = DockerContainer::create($imageName)->start();
By default the container will be daemonized and it will be cleaned up after it exists.
You can get a docker compose command using
$dockerComposeDirectory = './scripts/laravel-commands'; $dockerCompose = new DockerCompose($dockerComposeDirectory); $dockerCompose->up(); $dockerCompose->start();
Customizing the docker container
Prevent daemonization
If you don't want your docker being daemonized, call doNotDaemonize.
$containerInstance = DockerContainer::create($imageName) ->doNotDaemonize() ->start();
Prevent automatic clean up
If you don't want your docker being cleaned up after it exists, call doNotCleanUpAfterExit.
$containerInstance = DockerContainer::create($imageName) ->doNotCleanUpAfterExit() ->start();
Priviliged
If you want your docker being privileged, call privileged.
$containerInstance = DockerContainer::create($imageName) ->privileged() ->start();
Naming the container
You can name the container by passing the name as the second argument to the constructor.
new DockerContainer($imageName, $nameOfContainer));
Alternatively, use the name method.
$containerInstance = DockerContainer::create($imageName) ->name($yourName) ->start();
Mapping ports
You can map ports between the host machine and the docker container using the mapPort method. To map multiple ports, just call mapPort multiple times.
$containerInstance = DockerContainer::create($imageName) ->mapPort($portOnHost, $portOnContainer) ->mapPort($anotherPortOnHost, $anotherPortOnContainer) ->start();
Environment variables
You can set environment variables using the setEnvironmentVariable method. To add multiple arguments, just call setEnvironmentVariable multiple times.
$containerInstance = DockerContainer::create($imageName) ->setEnvironmentVariable($variableKey, $variableValue) ->setEnvironmentVariable($anotherVariableKey, $anotherVariableValue) ->start();
Setting Volumes
You can set volumes using the setVolume method. To add multiple arguments, just call setVolume multiple times.
$containerInstance = DockerContainer::create($imageName) ->setVolume($pathOnHost, $pathOnDocker) ->setVolume($anotherPathOnHost, $anotherPathOnDocker) ->start();
Setting Labels
You can set labels using the setLabel method. To add multiple arguments, just call setLabel multiple times.
$containerInstance = DockerContainer::create($imageName) ->setLabel($labelName, $labelValue) ->setLabel($anotherLabelName, $anotherLabelValue) ->start();
Automatically stopping the container after PHP exists
When using this package in a testing environment, it can be handy that the docker container is stopped after __destruct is called on it (mostly this will happen when the PHP script ends). You can enable this behaviour with the stopOnDestruct method.
$containerInstance = DockerContainer::create($imageName) ->stopOnDestruct() ->start();
Getting the start command string
You can get the string that will be executed when a container is started with the getStartCommand function
// returns "docker run -d --rm spatie/docker" DockerContainer::create($imageName)->getStartCommand();
Available methods on the docker container instance
Executing a command
To execute a command on the container, use the execute method.
$process = $instance->execute($command);
You can execute multiple command in one go by passing an array.
$process = $instance->execute([$command, $anotherCommand]);
The execute method returns an instance of Symfony/Process.
You can check if your command ran successfully using the isSuccessful $method
$process->isSuccessful(); // returns a boolean
You can get to the output using getOutput(). If the command did not run successfully, you can use getErrorOutput(). For more information on how to work with a Process head over to the Symfony docs.
Installing a public key
If you cant to connect to your container instance via SSH, you probably want to add a public key to it.
This can be done using the addPublicKey method.
$instance->addPublicKey($pathToPublicKey);
It is assumed that the authorized_keys file is located in at /root/.ssh/authorized_keys. If this is not the case, you can specify the path of that file as a second parameter.
$instance->addPublicKey($pathToPublicKey, $pathToAuthorizedKeys);
Note that in order to be able to connect via SSH, you should set up a SSH server in your dockerfile. Take a look at the dockerfile in the tests of this package for an example.
Adding files to your instance
Files can be added to an instance with addFiles.
$instance->addFiles($fileOrDirectoryOnHost, $pathInContainer);
Adding other functions on the docker instance
The Spatie\Docker\ContainerInstance class is macroable. This means you can add extra functions to it.
Spatie\Docker\DockerContainerInstance::macro('whoAmI', function () { $process = $containerInstance->run('whoami'); return $process->getOutput(); }); $containerInstance = DockerContainer::create($imageName)->start(); $containerInstace->whoAmI(); // returns of name of user in the docker container
Testing
Before running the tests for the first time, you must build the spatie/docker container with:
composer build-docker
Next, you can run the tests with:
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security
If you discover any security related issues, please email freek@spatie.be instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.
alvar01o/docker 适用场景与选型建议
alvar01o/docker 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 13 次下载、GitHub Stars 达 0, 最近一次更新时间为 2021 年 01 月 19 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「docker」 「spatie」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 alvar01o/docker 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 alvar01o/docker 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 alvar01o/docker 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Docker based testing environment for shopware projects.
The Laragoon utility package
Docker compose for Robo Task Runner
Receive webhooks in Laravel apps
Deployment command
Easily optimize images using PHP
统计信息
- 总下载量: 13
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 1
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2021-01-19