Erste Schritte

Linux Container ermöglichen es auf Betriebssystemebene, mehrere voneinander isoliert laufende Linux-Systeme laufen zu lassen. Nach der Installation steht über die eingebundene Pahr-Datei die Bibliothek und deren Funktionen zur Verfügung.

include alvine.infrastructure.docker;

Um mit Docker arbeiten zu können, benötigt man eine Client-Instanz.

// URI auf die TCP Schnittstelle
// localhost Host auf dem Docker läuft
// 2375 ist der standard-PORT von Docker
// $uri = new \Alvine\Net\Resource\URI('http://localhost:2375'));
// 
// Alternativ kann auch der Unix-Socket verwendet werden.
// $uri = new \Alvine\Net\Resource\URI('unix:///var/run/docker.sock'));
$uri = new \Alvine\Net\Resource\URI('http://localhost:2375');

$docker=new \Alvine\Infrastructure\Docker\Client(
      new \Alvine\Net\Resource\URI($uri));

Mit dieser Instanz lassen sich alle implementierten Funktionen von Docker ansprechen. Eine genaue Auflistung der implementierten Funktionen kann man der API-Dokumentation entnehmen.

In dem folgenden Beispiel ist ein Lebenszyklus eines Containers und Images auf einen Blick dargestellt.

// Neues Dockerfile
$repoTag=new \Alvine\Infrastructure\Docker\RepoTag(
    \Alvine\Infrastructure\Docker\Build\Dockerfile::UBUNTU);
$dockerfile=new \Alvine\Infrastructure\Docker\Build\Dockerfile($repoTag);
$dockerfile->setCommand('ls');

$docker=new \Alvine\Infrastructure\Docker\Client(
    // URI auf die TCP Schnittstelle
    // localhost Host auf dem Docker läuft
    // 2375 ist der standard-PORT von Docker
    // $uri = new \Alvine\Net\Resource\URI('http://localhost:2375'));
    // 
    // Alternativ kann auch der Unix-Socket verwendet werden.
    // $uri = new \Alvine\Net\Resource\URI('unix:///var/run/docker.sock'));
    new \Alvine\Net\Resource\URI($uri));

$imgRepoTag = new \Alvine\Infrastructure\Docker\RepoTag(
    'test', 'latest');

// Docker-Image bauen
$resultStream=$docker->build($dockerfile, $imgRepoTag);
$imageID=$resultStream->getImageID();

/**
 * Imagedaten auslesen
 */
$image=$docker->inspectImage($imageID);

/**
 * Container starten
 */
$config=new \Alvine\Infrastructure\Docker\Container\Config($imageID);
$container=$docker->runContainer(null, $config);
$containerID=$container->getContainerID();

/**
 * Container stoppen &  löschen
 */
$containerResult=$docker->stopContainer($containerID);
$docker->deleteContainer($containerID);

/** Image wieder löschen */
$docker->deleteImage($imgRepoTag);

Kommentare