Skip to content

Instantly share code, notes, and snippets.

@Vitexus
Created July 25, 2018 06:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Vitexus/4c8879c656b4e62b5db0d39cfb09f2c5 to your computer and use it in GitHub Desktop.
Save Vitexus/4c8879c656b4e62b5db0d39cfb09f2c5 to your computer and use it in GitHub Desktop.
Run Chosen docker images as named container
<?php
require_once '../vendor/autoload.php';
/**
* http://docker-php.readthedocs.io/en/latest/cookbook/container-run/
*/
use Amp\Loop;
use Docker\Docker;
use Docker\DockerClientFactory;
use Docker\API\Model\ContainersCreatePostBody;
use Docker\API\Model\HostConfig;
use Docker\API\Model\PortBinding;
$oPage = new \Ease\TWB\WebPage();
$client = DockerClientFactory::create([
'remote_socket' => 'tcp://127.0.0.1:2376',
'ssl' => false,
]);
$docker = Docker::create($client);
if ($oPage->isPosted()) {
$containerConfig = new ContainersCreatePostBody();
$containerConfig->setImage($oPage->getRequestValue('image').':latest');
$containerConfig->setTty(true);
$expose = new \ArrayObject();
$expose['80/tcp'] = new \stdClass();
$containerConfig->setExposedPorts($expose);
$portBinding = new PortBinding();
$portBinding->setHostPort('8080');
$portBinding->setHostIp('0.0.0.0');
$portMap = new \ArrayObject();
$portMap['80/tcp'] = [$portBinding];
$hostConfig = new HostConfig();
$hostConfig->setPortBindings($portMap);
$containerConfig->setHostConfig($hostConfig);
try {
// $containerConfig->setCmd(['echo', 'I am running a command']);
$containerCreateResult = $docker->containerCreate($containerConfig,
['name' => $oPage->getRequestValue('customer').'-'.basename($oPage->getRequestValue('image'))]);
} catch (Docker\API\Exception\ContainerCreateNotFoundException $exc) {
$oPage->addStatusMessage($exc->getMessage(), 'error');
echo $exc->getTraceAsString();
}
$docker->containerStart($containerCreateResult->getId());
}
$containers = $docker->containerList();
$twbcontainer = new \Ease\TWB\Container();
$listing = new \Ease\Html\UlTag();
foreach ($containers as $container) {
$listing->addItem($container->getNames());
}
$form = new Ease\TWB\Form('order');
$form->addInput(new \Ease\Html\InputTextTag('customer'), _('Customer'));
$form->addInput(new \Ease\Html\SelectTag('image',
[
'vitexsoftware/flexplorer' => _('FlexPlorer'),
'vitexsoftware/flexibee-client-config' => _('Client Config'),
]
));
$form->addItem(new \Ease\TWB\SubmitButton('ok'));
$row = new \Ease\TWB\Row();
$row->addColumn(6, $listing);
$row->addColumn(6, $form);
$twbcontainer->addItem($row);
$oPage->addItem($twbcontainer);
$oPage->draw();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment