diff --git a/src/DrupalCI/Console/DrupalCIConsoleApp.php b/src/DrupalCI/Console/DrupalCIConsoleApp.php
index 02b3df8..13bcc48 100644
--- a/src/DrupalCI/Console/DrupalCIConsoleApp.php
+++ b/src/DrupalCI/Console/DrupalCIConsoleApp.php
@@ -28,7 +28,6 @@ use DrupalCI\Console\Command\Config\ConfigSetCommand;
 use DrupalCI\Console\Command\Config\ConfigShowCommand;
 use DrupalCI\Console\Command\Config\ConfigClearCommand;
 use DrupalCI\Console\Command\Status\StatusCommand;
-use PrivateTravis\PrivateTravisCommand;
 
 class DrupalCIConsoleApp extends Application {
 
@@ -62,7 +61,6 @@ class DrupalCIConsoleApp extends Application {
       new InitPhpContainersCommand(),
       new RunCommand(),
       new StatusCommand(),
-      new PrivateTravisCommand('travis'),
     ];
     $this->addCommands($commands);
   }
diff --git a/src/DrupalCI/Plugin/BuildSteps/environment/EnvironmentBase.php b/src/DrupalCI/Plugin/BuildSteps/environment/EnvironmentBase.php
index ec779ec..c088aa6 100644
--- a/src/DrupalCI/Plugin/BuildSteps/environment/EnvironmentBase.php
+++ b/src/DrupalCI/Plugin/BuildSteps/environment/EnvironmentBase.php
@@ -6,10 +6,10 @@
 
 namespace DrupalCI\Plugin\BuildSteps\environment;
 
-use Docker\Exception\ImageNotFoundException;
 use DrupalCI\Console\Output;
 use DrupalCI\Plugin\JobTypes\JobInterface;
 use DrupalCI\Plugin\PluginBase;
+use Http\Client\Plugin\Exception\ClientErrorException;
 
 /**
  * Base class for 'environment' plugins.
@@ -27,9 +27,9 @@ abstract class EnvironmentBase extends PluginBase {
       $tag = empty($container_string[1]) ? 'latest' : $container_string[1];
 
       try {
-        $image = $manager->find($name,$tag);
+        $image = $manager->find($image_name['image']);
       }
-      catch (ImageNotFoundException $e) {
+      catch (ClientErrorException $e) {
         Output::error("Missing Image", "Required container image <options=bold>'$name:$tag'</options=bold> not found.");
         $job->error();
         return FALSE;
diff --git a/src/DrupalCI/Plugin/BuildSteps/generic/ContainerCommand.php b/src/DrupalCI/Plugin/BuildSteps/generic/ContainerCommand.php
index ec7841a..a38b71c 100644
--- a/src/DrupalCI/Plugin/BuildSteps/generic/ContainerCommand.php
+++ b/src/DrupalCI/Plugin/BuildSteps/generic/ContainerCommand.php
@@ -8,6 +8,9 @@
 
 namespace DrupalCI\Plugin\BuildSteps\generic;
 
+use Docker\API\Model\ExecConfig;
+use Docker\API\Model\ExecStartConfig;
+use Docker\Manager\ExecManager;
 use DrupalCI\Console\Output;
 use DrupalCI\Plugin\JobTypes\JobInterface;
 use DrupalCI\Plugin\PluginBase;
@@ -34,44 +37,55 @@ class ContainerCommand extends PluginBase {
       foreach ($configs as $type => $containers) {
         foreach ($containers as $container) {
           $id = $container['id'];
-          $instance = $manager->find($id);
           $short_id = substr($id, 0, 8);
           Output::writeLn("<info>Executing on container instance $short_id:</info>");
           foreach ($data as $cmd) {
             Output::writeLn("<fg=magenta>$cmd</fg=magenta>");
-            $exec = ["/bin/bash", "-c", $cmd];
-            $exec_id = $manager->exec($instance, $exec, TRUE, TRUE, TRUE, TRUE);
+
+            $exec_config = new ExecConfig();
+            $exec_config->setTty(FALSE);
+            $exec_config->setAttachStderr(TRUE);
+            $exec_config->setAttachStdout(TRUE);
+            $exec_config->setAttachStdin(FALSE);
+            $command = ["/bin/bash", "-c", $cmd];
+            $exec_config->setCmd($command);
+
+            $exec_manager = $job->getDocker()->getExecManager();
+            $response = $exec_manager->create($id, $exec_config);
+
+            $exec_id = $response->getId();
             Output::writeLn("<info>Command created as exec id " . substr($exec_id, 0, 8) . "</info>");
-            $result = $manager->execstart($exec_id, function ($result, $type) {
-              if ($type === 1) {
-                Output::write("$result");
-              }
-              else {
-                Output::error('Error', $result);
-              }
+
+            $exec_start_config = new ExecStartConfig();
+            $exec_start_config->setTty(FALSE);
+            $exec_start_config->setDetach(FALSE);
+
+            $stream = $exec_manager->start($exec_id, $exec_start_config, [], ExecManager::FETCH_STREAM);
+
+            $stdoutFull = "";
+            $stderrFull = "";
+            $stream->onStdout(function ($stdout) use (&$stdoutFull) {
+              $stdoutFull .= $stdout;
+              Output::write($stdout);
+            });
+            $stream->onStderr(function ($stderr) use (&$stderrFull) {
+              $stderrFull .= $stderr;
+              Output::write($stderr);
             });
-            // Response stream is never read you need to simulate a wait in order to get output
-            $result->getBody()->getContents();
-            Output::writeLn((string) $result);
-            $inspection = $manager->execinspect($exec_id);
+            $stream->wait();
 
-            if ($this->checkCommandStatus($inspection->ExitCode) !==0) {
+            $exec_command_exit_code = $exec_manager->find($exec_id)->getExitCode();
+
+            if ($exec_command_exit_code !==0) {
+              Output::error('Error', "Received a non-zero return code from the last command executed on the container.  (Return status: $exec_command_exit_code)");
               $job->error();
               break 3;
             }
+            else {
+            }
           }
         }
       }
     }
   }
-
-  protected function checkCommandStatus($signal) {
-    if ($signal !==0) {
-      Output::error('Error', "Received a non-zero return code from the last command executed on the container.  (Return status: " . $signal . ")");
-      return 1;
-    }
-    else {
-      return 0;
-    }
-  }
 }
diff --git a/src/DrupalCI/Plugin/JobTypes/JobBase.php b/src/DrupalCI/Plugin/JobTypes/JobBase.php
index d7cc7c2..0402324 100644
--- a/src/DrupalCI/Plugin/JobTypes/JobBase.php
+++ b/src/DrupalCI/Plugin/JobTypes/JobBase.php
@@ -6,6 +6,8 @@
 
 namespace DrupalCI\Plugin\JobTypes;
 
+use Docker\API\Model\ContainerConfig;
+use Docker\API\Model\HostConfig;
 use Drupal\Component\Annotation\Plugin\Discovery\AnnotatedClassDiscovery;
 use Drupal\Component\Plugin\Exception\PluginNotFoundException;
 use DrupalCI\Console\Output;
@@ -14,15 +16,12 @@ use DrupalCI\Job\Results\Artifacts\BuildArtifactList;
 use DrupalCI\Job\CodeBase\JobCodeBase;
 use DrupalCI\Job\Definition\JobDefinition;
 use DrupalCI\Job\Results\JobResults;
-use DrupalCIResultsApi\Api;
 use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Console\Tests\Output\ConsoleOutputTest;
 use Symfony\Component\Process\Process;
 use DrupalCI\Console\Jobs\ContainerBase;
 use Docker\Docker;
-use Docker\Http\DockerClient as Client;
+use Docker\DockerClient as Client;
 use Symfony\Component\Yaml\Yaml;
-use Docker\Container;
 use PDO;
 use Symfony\Component\Console\Event\ConsoleExceptionEvent;
 use Symfony\Component\Console\ConsoleEvents;
@@ -144,7 +143,7 @@ class JobBase extends ContainerBase implements JobInterface {
    */
   public function getDocker()
   {
-    $client = Client::createWithEnv();
+    $client = Client::createFromEnv();
     if (null === $this->docker) {
       $this->docker = new Docker($client);
     }
@@ -354,15 +353,31 @@ class JobBase extends ContainerBase implements JobInterface {
       $this->setDefaultCommand($config);
     }
 
-    $instance = new Container($config);
-    $manager->create($instance);
+    // Instantiate container
+    // TODO: Use a normalizer
+    $container_config = new ContainerConfig();
+    $container_config->setImage($config['Image']);
+    $container_config->setCmd($config['Cmd']);
+    $host_config = new HostConfig();
+    $host_config->setBinds($config['HostConfig']['Binds']);
+    $host_config->setLinks($config['HostConfig']['Links']);
+    $container_config->setHostConfig($host_config);
+    $parameters = [];
+    if (!empty($config['name'])) {
+      $parameters = [ 'name' => $config['name'] ];
+    }
+
+    $create_result = $manager->create($container_config, $parameters);
+    $container_id = $create_result->getId();
 
-    $manager->run($instance, function($output, $type) {
-      fputs($type === 1 ? STDOUT : STDERR, $output);
-    }, [], true);
+    // TODO: Ensure there are no stopped containers with the same name (currently throws fatal)
+    $response = $manager->start($container_id);
+    // TODO: Catch and exception if doesn't return 204.
 
-    $container['id'] = $instance->getID();
-    $container['name'] = $instance->getName();
+    $service_container = $manager->find($container_id);
+    $container['id'] = $service_container->getID();
+    $container['name'] = $service_container->getName();
+    $container['ip'] = $service_container->getNetworkSettings()->getIPAddress();
     $container['created'] = TRUE;
     $short_id = substr($container['id'], 0, 8);
     Output::writeln("<comment>Container <options=bold>${container['name']}</options=bold> created from image <options=bold>${container['image']}</options=bold> with ID <options=bold>$short_id</options=bold></comment>");
@@ -426,12 +441,13 @@ class JobBase extends ContainerBase implements JobInterface {
     $docker = $this->getDocker();
     $manager = $docker->getContainerManager();
     $instances = array();
+
+    $images = $manager->findAll();
+
     foreach ($manager->findAll() as $running) {
-      $repo = $running->getImage()->getRepository();
-      $tag = $running->getImage()->getTag();
+      $repo = $running->getImage();
       $id = substr($running->getID(), 0, 8);
-      $instance_key = !strcmp('latest',$tag) ? $repo : $repo . ':' . $tag;
-      $instances[$instance_key] = $id;
+      $instances[$repo] = $id;
     };
     foreach ($this->serviceContainers[$container_type] as $key => $image) {
       if (in_array($image['image'], array_keys($instances))) {
@@ -441,7 +457,7 @@ class JobBase extends ContainerBase implements JobInterface {
         $container = $manager->find($instances[$image['image']]);
         $container_id = $container->getID();
         $container_name = $container->getName();
-        $container_ip = $container->getRuntimeInformations()["NetworkSettings"]["IPAddress"];
+        $container_ip = $container->getNetworkSettings()->getIPAddress();
         $this->serviceContainers[$container_type][$key]['id'] = $container_id;
         $this->serviceContainers[$container_type][$key]['name'] = $container_name;
         $this->serviceContainers[$container_type][$key]['ip'] = $container_ip;
@@ -453,20 +469,36 @@ class JobBase extends ContainerBase implements JobInterface {
       // Get container configuration, which defines parameters such as exposed ports, etc.
       $configs = $this->getContainerConfiguration($image['image']);
       $config = $configs[$image['image']];
+
       // TODO: Allow classes to modify the default configuration before processing
+
       // Instantiate container
-      $container = new Container($config);
+
+      // TODO: Use a normalizer
+      $container_config = new ContainerConfig();
+      $container_config->setImage($config['Image']);
+      $host_config = new HostConfig();
+      $host_config->setBinds($config['HostConfig']['Binds']);
+      $container_config->setHostConfig($host_config);
+      $parameters = [];
       if (!empty($config['name'])) {
-        $container->setName($config['name']);
+        $parameters = [ 'name' => $config['name'] ];
       }
+
+      $create_result = $manager->create($container_config, $parameters);
+      $container_id = $create_result->getId();
+
       // Create the docker container instance, running as a daemon.
       // TODO: Ensure there are no stopped containers with the same name (currently throws fatal)
-      $manager->run($container, function($output, $type) {
-        fputs($type === 1 ? STDOUT : STDERR, $output);
-      }, [], true);
+      $response = $manager->start($container_id);
+      // TODO: Catch and exception if doesn't return 204.
+
+      $container = $manager->find($container_id);
+
       $container_id = $container->getID();
       $container_name = $container->getName();
-      $container_ip = $container->getRuntimeInformations()["NetworkSettings"]["IPAddress"];
+      $container_ip = $container->getNetworkSettings()->getIPAddress();
+
       $this->serviceContainers[$container_type][$key]['id'] = $container_id;
       $this->serviceContainers[$container_type][$key]['name'] = $container_name;
       $this->serviceContainers[$container_type][$key]['ip'] = $container_ip;
