http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/HostConfig.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/HostConfig.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/HostConfig.java
new file mode 100644
index 0000000..275961f
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/HostConfig.java
@@ -0,0 +1,242 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.domain;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import java.beans.ConstructorProperties;
+import java.util.List;
+import java.util.Map;
+
+import org.jclouds.javax.annotation.Nullable;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.gson.annotations.SerializedName;
+
+public class HostConfig {
+
+   @SerializedName("ContainerIDFile")
+   private final String containerIDFile;
+   @SerializedName("Binds")
+   private final List<String> binds;
+   @SerializedName("LxcConf")
+   private final Map<String, String> lxcConf;
+   @SerializedName("Privileged")
+   private final boolean privileged;
+   @SerializedName("Dns")
+   private final String dns;
+   @SerializedName("DnsSearch")
+   private final String dnsSearch;
+   @SerializedName("PortBindings")
+   private final Map<String, List<Map<String, String>>> portBindings;
+   @SerializedName("Links")
+   private final List<String> links;
+   @SerializedName("PublishAllPorts")
+   private final boolean publishAllPorts;
+   @SerializedName("VolumesFrom")
+   private final List<String> volumesFrom;
+
+   @ConstructorProperties({ "ContainerIDFile", "Binds", "LxcConf", 
"Privileged", "Dns", "DnsSearch", "PortBindings",
+           "Links", "PublishAllPorts", "VolumesFrom" })
+   protected HostConfig(@Nullable String containerIDFile, @Nullable 
List<String> binds,
+                        Map<String, String> lxcConf, boolean privileged, 
@Nullable String dns,
+                        @Nullable String dnsSearch, @Nullable Map<String, 
List<Map<String, String>>> portBindings,
+                        @Nullable List<String> links, boolean publishAllPorts, 
@Nullable List<String> volumesFrom) {
+      this.containerIDFile = containerIDFile;
+      this.binds = binds != null ? ImmutableList.copyOf(binds) : 
ImmutableList.<String> of();
+      this.lxcConf = lxcConf != null ? ImmutableMap.copyOf(lxcConf) : 
ImmutableMap.<String, String> of();
+      this.privileged = checkNotNull(privileged, "privileged");
+      this.dns = dns;
+      this.dnsSearch = dnsSearch;
+      this.portBindings = portBindings != null ? 
ImmutableMap.copyOf(portBindings) : ImmutableMap.<String, List<Map<String, 
String>>> of();
+      this.links = links != null ? ImmutableList.copyOf(links) : 
ImmutableList.<String> of();
+      this.publishAllPorts = checkNotNull(publishAllPorts, "publishAllPorts");
+      this.volumesFrom = volumesFrom != null ? 
ImmutableList.copyOf(volumesFrom) : ImmutableList.<String> of();
+   }
+
+   public String getContainerIDFile() {
+      return containerIDFile;
+   }
+
+   public List<String> getBinds() {
+      return binds;
+   }
+
+   public Map<String, String> getLxcConf() {
+      return lxcConf;
+   }
+
+   public boolean isPrivileged() {
+      return privileged;
+   }
+
+   public String getDns() { return dns; }
+
+   public String getDnsSearch() { return dnsSearch; }
+
+   public Map<String, List<Map<String, String>>> getPortBindings() {
+      return portBindings;
+   }
+
+   @Nullable
+   public List<String> getLinks() {
+      return links;
+   }
+
+   public boolean isPublishAllPorts() {
+      return publishAllPorts;
+   }
+
+   public List<String> getVolumesFrom() {
+      return volumesFrom;
+   }
+
+   @Override
+   public boolean equals(Object o) {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      HostConfig that = (HostConfig) o;
+
+      return Objects.equal(this.containerIDFile, that.containerIDFile) &&
+              Objects.equal(this.binds, that.binds) &&
+              Objects.equal(this.lxcConf, that.lxcConf) &&
+              Objects.equal(this.privileged, that.privileged) &&
+              Objects.equal(this.dns, that.dns) &&
+              Objects.equal(this.dnsSearch, that.dnsSearch) &&
+              Objects.equal(this.portBindings, that.portBindings) &&
+              Objects.equal(this.links, that.links) &&
+              Objects.equal(this.publishAllPorts, that.publishAllPorts) &&
+              Objects.equal(this.volumesFrom, that.volumesFrom);
+   }
+
+   @Override
+   public int hashCode() {
+      return Objects.hashCode(containerIDFile, binds, lxcConf, privileged, 
dns, dnsSearch, portBindings, links,
+              publishAllPorts, volumesFrom);
+   }
+
+   @Override
+   public String toString() {
+      return Objects.toStringHelper(this)
+              .add("containerIDFile", containerIDFile)
+              .add("binds", binds)
+              .add("lxcConf", lxcConf)
+              .add("privileged", privileged)
+              .add("dns", dns)
+              .add("dnsSearch", dnsSearch)
+              .add("portBindings", portBindings)
+              .add("links", links)
+              .add("publishAllPorts", publishAllPorts)
+              .add("volumesFrom", volumesFrom)
+              .toString();
+   }
+
+   public static Builder builder() {
+      return new Builder();
+   }
+
+   public Builder toBuilder() {
+      return builder().fromHostConfig(this);
+   }
+
+   public static final class Builder {
+
+      private String containerIDFile;
+      private List<String> binds = Lists.newArrayList();
+      private Map<String, String> lxcConf = Maps.newLinkedHashMap();
+      private boolean privileged;
+      private String dns;
+      private String dnsSearch;
+      private Map<String, List<Map<String, String>>> portBindings = 
Maps.newLinkedHashMap();
+      private List<String> links = Lists.newArrayList();
+      private boolean publishAllPorts;
+      private List<String> volumesFrom = Lists.newArrayList();
+
+      public Builder containerIDFile(String containerIDFile) {
+         this.containerIDFile = containerIDFile;
+         return this;
+      }
+
+      public Builder binds(List<String> binds) {
+         this.binds.addAll(checkNotNull(binds, "binds"));
+         return this;
+      }
+
+      public Builder lxcConf(Map<String, String> lxcConf) {
+         this.lxcConf.putAll(checkNotNull(lxcConf, "lxcConf"));
+         return this;
+      }
+
+      public Builder privileged(boolean privileged) {
+         this.privileged = privileged;
+         return this;
+      }
+
+      public Builder dns(String dns) {
+         this.dns = dns;
+         return this;
+      }
+
+      public Builder dnsSearch(String dnsSearch) {
+         this.dnsSearch = dnsSearch;
+         return this;
+      }
+
+      public Builder links(List<String> links) {
+         this.links.addAll(checkNotNull(links, "links"));
+         return this;
+      }
+
+      public Builder portBindings(Map<String, List<Map<String, String>>> 
portBindings) {
+         this.portBindings.putAll(portBindings);
+         return this;
+      }
+
+      public Builder publishAllPorts(boolean publishAllPorts) {
+         this.publishAllPorts = publishAllPorts;
+         return this;
+      }
+
+      public Builder volumesFrom(List<String> volumesFrom) {
+         this.volumesFrom.addAll(checkNotNull(volumesFrom, "volumesFrom"));
+         return this;
+      }
+
+      public HostConfig build() {
+         return new HostConfig(containerIDFile, binds, lxcConf, privileged, 
dns, dnsSearch, portBindings, links,
+                 publishAllPorts, volumesFrom);
+      }
+
+      public Builder fromHostConfig(HostConfig in) {
+         return this
+                 .containerIDFile(in.getContainerIDFile())
+                 .binds(in.getBinds())
+                 .lxcConf(in.getLxcConf())
+                 .privileged(in.isPrivileged())
+                 .dns(in.getDns())
+                 .dnsSearch(in.getDnsSearch())
+                 .links(in.getLinks())
+                 .portBindings(in.getPortBindings())
+                 .publishAllPorts(in.isPublishAllPorts())
+                 .volumesFrom(in.getVolumesFrom());
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Image.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Image.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Image.java
new file mode 100644
index 0000000..186ece3
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Image.java
@@ -0,0 +1,239 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.domain;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableList;
+import com.google.gson.annotations.SerializedName;
+import org.jclouds.javax.annotation.Nullable;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+public class Image {
+
+   @SerializedName("Id")
+   private final String id;
+   @SerializedName("Parent")
+   private final String parent;
+   @SerializedName("Created")
+   private final String created;
+   @SerializedName("Container")
+   private final String container;
+   @SerializedName("DockerVersion")
+   private final String dockerVersion;
+   @SerializedName("Architecture")
+   private final String architecture;
+   @SerializedName("Os")
+   private final String os;
+   @SerializedName("Size")
+   private final long size;
+   @SerializedName("VirtualSize")
+   private final long virtualSize;
+   @SerializedName("RepoTags")
+   private final List<String> repoTags;
+
+   @ConstructorProperties({ "Id", "Parent", "Created", "Container", 
"DockerVersion", "Architecture", "Os", "Size",
+           "VirtualSize", "RepoTags", "Architecture" })
+   protected Image(String id, @Nullable String parent, @Nullable String 
created, @Nullable String container,
+                @Nullable String dockerVersion, @Nullable String architecture, 
@Nullable String os, long size,
+                @Nullable long virtualSize, @Nullable List<String> repoTags) {
+      this.id = checkNotNull(id, "id");
+      this.parent = parent;
+      this.created = created;
+      this.container = container;
+      this.dockerVersion = dockerVersion;
+      this.architecture = architecture;
+      this.os = os;
+      this.size = size;
+      this.virtualSize = virtualSize;
+      this.repoTags = repoTags != null ? ImmutableList.copyOf(repoTags) : 
ImmutableList.<String> of();
+   }
+
+   public String getId() {
+      return id;
+   }
+
+   public String getParent() {
+      return parent;
+   }
+
+   public String getCreated() {
+      return created;
+   }
+
+   public String getContainer() {
+      return container;
+   }
+
+   public String getDockerVersion() {
+      return dockerVersion;
+   }
+
+   public String getArchitecture() {
+      return architecture;
+   }
+
+   public String getOs() {
+      return os;
+   }
+
+   public long getSize() {
+      return size;
+   }
+
+   public long getVirtualSize() {
+      return virtualSize;
+   }
+
+   public List<String> getRepoTags() {
+      return repoTags;
+   }
+
+   @Override
+   public boolean equals(Object o) {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      Image that = (Image) o;
+
+      return Objects.equal(this.id, that.id) &&
+              Objects.equal(this.parent, that.parent) &&
+              Objects.equal(this.created, that.created) &&
+              Objects.equal(this.container, that.container) &&
+              Objects.equal(this.dockerVersion, that.dockerVersion) &&
+              Objects.equal(this.architecture, that.architecture) &&
+              Objects.equal(this.os, that.os) &&
+              Objects.equal(this.size, that.size) &&
+              Objects.equal(this.virtualSize, that.virtualSize);
+   }
+
+   @Override
+   public int hashCode() {
+      return Objects.hashCode(id, parent, created, container, dockerVersion, 
architecture, os, size,
+              virtualSize);
+   }
+
+   @Override
+   public String toString() {
+      return Objects.toStringHelper(this)
+              .add("id", id)
+              .add("parent", parent)
+              .add("created", created)
+              .add("container", container)
+              .add("dockerVersion", dockerVersion)
+              .add("architecture", architecture)
+              .add("os", os)
+              .add("size", size)
+              .add("virtualSize", virtualSize)
+              .add("repoTags", repoTags)
+              .toString();
+   }
+
+   public static Builder builder() {
+      return new Builder();
+   }
+
+   public Builder toBuilder() {
+      return builder().fromImage(this);
+   }
+
+   public static final class Builder {
+
+      private String id;
+      private String parent;
+      private String created;
+      private String container;
+      private String dockerVersion;
+      private String architecture;
+      private String os;
+      private long size;
+      private long virtualSize;
+      private List<String> repoTags = ImmutableList.of();
+
+      public Builder id(String id) {
+         this.id = id;
+         return this;
+      }
+
+      public Builder parent(String parent) {
+         this.parent = parent;
+         return this;
+      }
+
+      public Builder created(String created) {
+         this.created = created;
+         return this;
+      }
+
+      public Builder container(String container) {
+         this.container = container;
+         return this;
+      }
+
+      public Builder dockerVersion(String dockerVersion) {
+         this.dockerVersion = dockerVersion;
+         return this;
+      }
+
+      public Builder architecture(String architecture) {
+         this.architecture = architecture;
+         return this;
+      }
+
+      public Builder os(String os) {
+         this.os = os;
+         return this;
+      }
+
+      public Builder size(long size) {
+         this.size = size;
+         return this;
+      }
+
+      public Builder virtualSize(long virtualSize) {
+         this.virtualSize = virtualSize;
+         return this;
+      }
+
+      public Builder repoTags(List<String> repoTags) {
+         this.repoTags = ImmutableList.copyOf(checkNotNull(repoTags, 
"repoTags"));
+         return this;
+      }
+
+      public Image build() {
+         return new Image(id, parent, created, container, dockerVersion, 
architecture, os, size,
+                 virtualSize, repoTags);
+      }
+
+      public Builder fromImage(Image in) {
+         return this
+                 .id(in.getId())
+                 .parent(in.getParent())
+                 .created(in.getCreated())
+                 .container(in.getContainer())
+                 .dockerVersion(in.getDockerVersion())
+                 .architecture(in.getArchitecture())
+                 .os(in.getOs())
+                 .size(in.getSize())
+                 .virtualSize(in.getVirtualSize());
+                 //DO NOT add .repoTags(in.getRepoTags());
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/NetworkSettings.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/NetworkSettings.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/NetworkSettings.java
new file mode 100644
index 0000000..23f3fbe
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/NetworkSettings.java
@@ -0,0 +1,175 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.domain;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableMap;
+import com.google.gson.annotations.SerializedName;
+import org.jclouds.javax.annotation.Nullable;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+import java.util.Map;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+public class NetworkSettings {
+
+   @SerializedName("IPAddress")
+   private final String ipAddress;
+   @SerializedName("IPPrefixLen")
+   private final int ipPrefixLen;
+   @SerializedName("Gateway")
+   private final String gateway;
+   @SerializedName("Bridge")
+   private final String bridge;
+   @SerializedName("PortMapping")
+   private final String portMapping;
+   @SerializedName("Ports")
+   private final Map<String, List<Map<String, String>>> ports;
+
+   @ConstructorProperties({ "IPAddress", "IPPrefixLen", "Gateway", "Bridge", 
"PortMapping", "Ports" })
+   protected NetworkSettings(String ipAddress, int ipPrefixLen, String 
gateway, String bridge,
+                          @Nullable String portMapping, @Nullable Map<String, 
List<Map<String, String>>> ports) {
+      this.ipAddress = checkNotNull(ipAddress, "ipAddress");
+      this.ipPrefixLen = checkNotNull(ipPrefixLen, "ipPrefixLen");
+      this.gateway = checkNotNull(gateway, "gateway");
+      this.bridge = checkNotNull(bridge, "bridge");
+      this.portMapping = portMapping;
+      this.ports = ports != null ? ImmutableMap.copyOf(ports) : 
ImmutableMap.<String, List<Map<String, String>>> of();
+   }
+
+   public String getIpAddress() {
+      return ipAddress;
+   }
+
+   public int getIpPrefixLen() {
+      return ipPrefixLen;
+   }
+
+   public String getGateway() {
+      return gateway;
+   }
+
+   public String getBridge() {
+      return bridge;
+   }
+
+   public String getPortMapping() {
+      return portMapping;
+   }
+
+   public Map<String, List<Map<String, String>>> getPorts() {
+      return ports;
+   }
+
+   @Override
+   public boolean equals(Object o) {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      NetworkSettings that = (NetworkSettings) o;
+
+      return Objects.equal(this.ipAddress, that.ipAddress) &&
+              Objects.equal(this.ipPrefixLen, that.ipPrefixLen) &&
+              Objects.equal(this.gateway, that.gateway) &&
+              Objects.equal(this.bridge, that.bridge) &&
+              Objects.equal(this.portMapping, that.portMapping) &&
+              Objects.equal(this.ports, that.ports);
+   }
+
+   @Override
+   public int hashCode() {
+      return Objects.hashCode(ipAddress, ipPrefixLen, gateway, bridge, 
portMapping, ports);
+   }
+
+   @Override
+   public String toString() {
+      return Objects.toStringHelper(this)
+              .add("ipAddress", ipAddress)
+              .add("ipPrefixLen", ipPrefixLen)
+              .add("gateway", gateway)
+              .add("bridge", bridge)
+              .add("portMapping", portMapping)
+              .add("ports", ports)
+              .toString();
+   }
+
+   public static Builder builder() {
+      return new Builder();
+   }
+
+   public Builder toBuilder() {
+      return builder().fromNetworkSettings(this);
+   }
+
+   public static final class Builder {
+
+      private String ipAddress;
+      private int ipPrefixLen;
+      private String gateway;
+      private String bridge;
+      private String portMapping;
+      private Map<String, List<Map<String, String>>> ports = ImmutableMap.of();
+
+      public Builder ipAddress(String ipAddress) {
+         this.ipAddress = ipAddress;
+         return this;
+      }
+
+      public Builder ipPrefixLen(int ipPrefixLen) {
+         this.ipPrefixLen = ipPrefixLen;
+         return this;
+      }
+
+      public Builder gateway(String gateway) {
+         this.gateway = gateway;
+         return this;
+      }
+
+      public Builder bridge(String bridge) {
+         this.bridge = bridge;
+         return this;
+      }
+
+      public Builder portMapping(String portMapping) {
+         this.portMapping = portMapping;
+         return this;
+      }
+
+      public Builder ports(Map<String, List<Map<String, String>>> ports) {
+         this.ports = ImmutableMap.copyOf(checkNotNull(ports, "ports"));
+         return this;
+      }
+
+      public NetworkSettings build() {
+         return new NetworkSettings(ipAddress, ipPrefixLen, gateway, bridge, 
portMapping, ports);
+      }
+
+      public Builder fromNetworkSettings(NetworkSettings in) {
+         return this
+                 .ipAddress(in.getIpAddress())
+                 .ipPrefixLen(in.getIpPrefixLen())
+                 .gateway(in.getGateway())
+                 .bridge(in.getBridge())
+                 .portMapping(in.getPortMapping())
+                 .ports(in.getPorts());
+      }
+
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Port.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Port.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Port.java
new file mode 100644
index 0000000..b49dfa6
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Port.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.domain;
+
+import com.google.common.base.Objects;
+import com.google.gson.annotations.SerializedName;
+
+import java.beans.ConstructorProperties;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+public class Port {
+
+   @SerializedName("PrivatePort")
+   private final int privatePort;
+   @SerializedName("PublicPort")
+   private final int publicPort;
+   @SerializedName("Type")
+   private final String type;
+   @SerializedName("IP")
+   private final String ip;
+
+   @ConstructorProperties({ "PrivatePort", "PublicPort", "Type", "IP" })
+   protected Port(int privatePort, int publicPort, String type, String ip) {
+      this.privatePort = checkNotNull(privatePort, "privatePort");
+      this.publicPort = checkNotNull(publicPort, "publicPort");
+      this.type = checkNotNull(type, "type");
+      this.ip = checkNotNull(ip, "ip");
+   }
+
+   public int getPrivatePort() {
+      return privatePort;
+   }
+
+   public int getPublicPort() {
+      return publicPort;
+   }
+
+   public String getType() {
+      return type;
+   }
+
+   public String getIp() {
+      return ip;
+   }
+
+   @Override
+   public boolean equals(Object o) {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      Port that = (Port) o;
+
+      return Objects.equal(this.privatePort, that.privatePort) &&
+              Objects.equal(this.publicPort, that.publicPort) &&
+              Objects.equal(this.type, that.type) &&
+              Objects.equal(this.ip, that.ip);
+   }
+
+   @Override
+   public int hashCode() {
+      return Objects.hashCode(privatePort, publicPort, type, ip);
+   }
+
+   @Override
+   public String toString() {
+      return Objects.toStringHelper(this)
+              .add("privatePort", privatePort)
+              .add("publicPort", publicPort)
+              .add("type", type)
+              .add("ip", ip)
+              .toString();
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/State.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/State.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/State.java
new file mode 100644
index 0000000..ac1ba85
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/State.java
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.domain;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import java.beans.ConstructorProperties;
+
+import com.google.common.base.Objects;
+import com.google.gson.annotations.SerializedName;
+
+public class State {
+   @SerializedName("Pid")
+   private final int pid;
+   @SerializedName("Running")
+   private final boolean running;
+   @SerializedName("ExitCode")
+   private final int exitCode;
+   @SerializedName("StartedAt")
+   private final String startedAt;
+   @SerializedName("FinishedAt")
+   private final String finishedAt;
+   @SerializedName("Ghost")
+   private final boolean ghost;
+
+   @ConstructorProperties({ "Pid", "Running", "ExitCode", "StartedAt", 
"FinishedAt", "Ghost" })
+   protected State(int pid, boolean running, int exitCode, String startedAt, 
String finishedAt, boolean ghost) {
+      this.pid = checkNotNull(pid, "pid");
+      this.running = checkNotNull(running, "running");
+      this.exitCode = checkNotNull(exitCode, "exitCode");
+      this.startedAt = checkNotNull(startedAt, "startedAt");
+      this.finishedAt = checkNotNull(finishedAt, "finishedAt");
+      this.ghost = checkNotNull(ghost, "ghost");
+   }
+
+   public int getPid() {
+      return pid;
+   }
+
+   public boolean isRunning() {
+      return running;
+   }
+
+   public int getExitCode() {
+      return exitCode;
+   }
+
+   public String getStartedAt() {
+      return startedAt;
+   }
+
+   public String getFinishedAt() {
+      return finishedAt;
+   }
+
+   public boolean isGhost() {
+      return ghost;
+   }
+
+   @Override
+   public boolean equals(Object o) {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      State that = (State) o;
+
+      return Objects.equal(this.pid, that.pid) &&
+              Objects.equal(this.running, that.running) &&
+              Objects.equal(this.exitCode, that.exitCode) &&
+              Objects.equal(this.startedAt, that.startedAt) &&
+              Objects.equal(this.finishedAt, that.finishedAt) &&
+              Objects.equal(this.ghost, that.ghost);
+   }
+
+   @Override
+   public int hashCode() {
+      return Objects.hashCode(pid, running, exitCode, startedAt, finishedAt, 
ghost);
+   }
+
+   @Override
+   public String toString() {
+      return Objects.toStringHelper(this)
+              .add("pid", pid)
+              .add("running", running)
+              .add("exitCode", exitCode)
+              .add("startedAt", startedAt)
+              .add("finishedAt", finishedAt)
+              .add("ghost", ghost)
+              .toString();
+   }
+
+   public static Builder builder() {
+      return new Builder();
+   }
+
+   public Builder toBuilder() {
+      return builder().fromState(this);
+   }
+
+   public static final class Builder {
+
+      private int pid;
+      private boolean running;
+      private int exitCode;
+      private String startedAt;
+      private String finishedAt;
+      private boolean ghost;
+
+      public Builder pid(int pid) {
+         this.pid = pid;
+         return this;
+      }
+
+      public Builder running(boolean running) {
+         this.running = running;
+         return this;
+      }
+
+      public Builder exitCode(int exitCode) {
+         this.exitCode = exitCode;
+         return this;
+      }
+
+      public Builder startedAt(String startedAt) {
+         this.startedAt = startedAt;
+         return this;
+      }
+
+      public Builder finishedAt(String finishedAt) {
+         this.finishedAt = finishedAt;
+         return this;
+      }
+
+      public Builder ghost(boolean ghost) {
+         this.ghost = ghost;
+         return this;
+      }
+
+      public State build() {
+         return new State(pid, running, exitCode, startedAt, finishedAt, 
ghost);
+      }
+
+      public Builder fromState(State in) {
+         return this
+                 .pid(in.getPid())
+                 .running(in.isRunning())
+                 .exitCode(in.getExitCode())
+                 .startedAt(in.getStartedAt())
+                 .finishedAt(in.getFinishedAt())
+                 .ghost(in.isGhost());
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Version.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Version.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Version.java
new file mode 100644
index 0000000..445a225
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Version.java
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.domain;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import java.beans.ConstructorProperties;
+
+import com.google.common.base.Objects;
+import com.google.gson.annotations.SerializedName;
+
+public class Version {
+   @SerializedName("Arch")
+   private final String arch;
+   @SerializedName("GitCommit")
+   private final String gitCommit;
+   @SerializedName("GoVersion")
+   private final String goVersion;
+   @SerializedName("KernelVersion")
+   private final String kernelVersion;
+   @SerializedName("Os")
+   private final String os;
+   @SerializedName("Version")
+   private final String version;
+
+   @ConstructorProperties({ "Arch", "GitCommit", "GoVersion", "KernelVersion", 
"Os", "Version" })
+   protected Version(String arch, String gitCommit, String goVersion, String 
kernelVersion, String os, String version) {
+      this.arch = checkNotNull(arch, "arch");
+      this.gitCommit = checkNotNull(gitCommit, "gitCommit");
+      this.goVersion = checkNotNull(goVersion, "goVersion");
+      this.kernelVersion = checkNotNull(kernelVersion, "kernelVersion");
+      this.os = checkNotNull(os, "os");
+      this.version = checkNotNull(version, "version");
+   }
+
+   public String getArch() {
+      return arch;
+   }
+
+   public String getGitCommit() {
+      return gitCommit;
+   }
+
+   public String getGoVersion() {
+      return goVersion;
+   }
+
+   public String getKernelVersion() {
+      return kernelVersion;
+   }
+
+   public String getOs() {
+      return os;
+   }
+
+   public String getVersion() {
+      return version;
+   }
+
+   @Override
+   public boolean equals(Object o) {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      Version that = (Version) o;
+
+      return Objects.equal(this.arch, that.arch) &&
+              Objects.equal(this.gitCommit, that.gitCommit) &&
+              Objects.equal(this.goVersion, that.goVersion) &&
+              Objects.equal(this.kernelVersion, that.kernelVersion) &&
+              Objects.equal(this.os, that.os) &&
+              Objects.equal(this.version, that.version);
+   }
+
+   @Override
+   public int hashCode() {
+      return Objects.hashCode(arch, gitCommit, goVersion, kernelVersion, os, 
version);
+   }
+
+   @Override
+   public String toString() {
+      return Objects.toStringHelper(this)
+              .add("arch", arch)
+              .add("gitCommit", gitCommit)
+              .add("goVersion", goVersion)
+              .add("kernelVersion", kernelVersion)
+              .add("os", os)
+              .add("version", version)
+              .toString();
+   }
+
+   public static Builder builder() {
+      return new Builder();
+   }
+
+   public Builder toBuilder() {
+      return builder().fromVersion(this);
+   }
+
+   public static final class Builder {
+
+      private String arch;
+      private String gitCommit;
+      private String goVersion;
+      private String kernelVersion;
+      private String os;
+      private String version;
+
+      public Builder arch(String arch) {
+         this.arch = arch;
+         return this;
+      }
+
+      public Builder gitCommit(String gitCommit) {
+         this.gitCommit = gitCommit;
+         return this;
+      }
+
+      public Builder goVersion(String goVersion) {
+         this.goVersion = goVersion;
+         return this;
+      }
+
+      public Builder kernelVersion(String kernelVersion) {
+         this.kernelVersion = kernelVersion;
+         return this;
+      }
+
+      public Builder os(String os) {
+         this.os = os;
+         return this;
+      }
+
+      public Builder version(String version) {
+         this.version = version;
+         return this;
+      }
+
+      public Version build() {
+         return new Version(arch, gitCommit, goVersion, kernelVersion, os, 
version);
+      }
+
+      public Builder fromVersion(Version in) {
+         return this
+                 .arch(in.getArch())
+                 .gitCommit(in.getGitCommit())
+                 .goVersion(in.getGoVersion())
+                 .kernelVersion(in.getKernelVersion())
+                 .os(in.getOs())
+                 .version(in.getVersion());
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/features/RemoteApi.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/features/RemoteApi.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/features/RemoteApi.java
new file mode 100644
index 0000000..96b0228
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/features/RemoteApi.java
@@ -0,0 +1,272 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.features;
+
+import java.io.Closeable;
+import java.io.File;
+import java.io.InputStream;
+import java.util.Set;
+
+import javax.inject.Named;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+
+import org.jclouds.Fallbacks;
+import org.jclouds.docker.binders.BindInputStreamToRequest;
+import org.jclouds.docker.domain.Config;
+import org.jclouds.docker.domain.Container;
+import org.jclouds.docker.domain.HostConfig;
+import org.jclouds.docker.domain.Image;
+import org.jclouds.docker.domain.Version;
+import org.jclouds.docker.options.BuildOptions;
+import org.jclouds.docker.options.CommitOptions;
+import org.jclouds.docker.options.CreateImageOptions;
+import org.jclouds.docker.options.DeleteImageOptions;
+import org.jclouds.docker.options.ListContainerOptions;
+import org.jclouds.docker.options.ListImageOptions;
+import org.jclouds.docker.options.RemoveContainerOptions;
+import org.jclouds.io.Payload;
+import org.jclouds.rest.annotations.BinderParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.Headers;
+import org.jclouds.rest.binders.BindToJsonPayload;
+
+@Consumes(MediaType.APPLICATION_JSON)
+public interface RemoteApi extends Closeable {
+
+   /**
+    * Get the information of the current docker version.
+    *
+    * @return The information of the current docker version.
+    */
+   @Named("version")
+   @GET
+   @Path("/version")
+   Version getVersion();
+
+   /**
+    * List all running containers
+    *
+    * @return a set of containers
+    */
+   @Named("containers:list")
+   @GET
+   @Path("/containers/json")
+   @Fallback(Fallbacks.EmptySetOnNotFoundOr404.class)
+   Set<Container> listContainers();
+
+   /**
+    * List all running containers
+    *
+    * @param options the options to list the containers (@see 
ListContainerOptions)
+    * @return a set of containers
+    */
+   @Named("containers:list")
+   @GET
+   @Path("/containers/json")
+   @Fallback(Fallbacks.EmptySetOnNotFoundOr404.class)
+   Set<Container> listContainers(ListContainerOptions options);
+
+   /**
+    * Create a container
+    *
+    * @param name the name for the new container. Must match /?[a-zA-Z0-9_-]+.
+    * @param config the container’s configuration (@see BindToJsonPayload)
+    * @return a new container
+    */
+   @Named("container:create")
+   @POST
+   @Path("/containers/create")
+   Container createContainer(@QueryParam("name") String name, 
@BinderParam(BindToJsonPayload.class) Config config);
+
+   /**
+    * Return low-level information on the container id
+    * @param containerId  The id of the container to get.
+    * @return The details of the container or <code>null</code> if the 
container with the given id doesn't exist.
+    */
+   @Named("container:inspect")
+   @GET
+   @Path("/containers/{id}/json")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   Container inspectContainer(@PathParam("id") String containerId);
+
+   /**
+    * Remove the container by id from the filesystem
+    *
+    * @param containerId The id of the container to be removed.
+    */
+   @Named("container:delete")
+   @DELETE
+   @Path("/containers/{id}")
+   void removeContainer(@PathParam("id") String containerId);
+
+   /**
+    * Remove the container by id from the filesystem
+    *
+    * @param containerId The id of the container to be removed.
+    * @param options the operation’s configuration (@see 
RemoveContainerOptions)
+    */
+   @Named("container:delete")
+   @DELETE
+   @Path("/containers/{id}")
+   void removeContainer(@PathParam("id") String containerId, 
RemoveContainerOptions options);
+
+   /**
+    * Start a container by id.
+    *
+    * @param containerId The id of the container to be started.
+    */
+   @Named("container:start")
+   @POST
+   @Path("/containers/{id}/start")
+   void startContainer(@PathParam("id") String containerId);
+
+   /**
+    * Start a container.
+    *
+    * @param containerId The id of the container to be started.
+    * @param hostConfig the container’s host configuration
+    */
+   @Named("container:start")
+   @POST
+   @Path("/containers/{id}/start")
+   void startContainer(@PathParam("id") String containerId, 
@BinderParam(BindToJsonPayload.class) HostConfig hostConfig);
+
+   /**
+    * Stop a container by id.
+    *
+    * @param containerId The id of the container to be stopped.
+    * @return the stream of the stop execution.
+    */
+   @Named("container:stop")
+   @POST
+   @Path("/containers/{id}/stop")
+   void stopContainer(@PathParam("id") String containerId);
+
+   /**
+    * Create a new image from a container’s changes
+    *
+    * @param options the commit’s configuration (@see CommitOptions)
+    * @return a new image created from the current container's status.
+    */
+   @Named("container:commit")
+   @POST
+   @Path("/commit")
+   Image commit(CommitOptions options);
+
+   /**
+    * List images
+    *
+    * @return the images available.
+    */
+   @Named("images:list")
+   @GET
+   @Path("/images/json")
+   @Fallback(Fallbacks.EmptySetOnNotFoundOr404.class)
+   Set<Image> listImages();
+
+   /**
+    * List images
+    *
+    * @param options the configuration to list images (@see ListImageOptions)
+    * @return the images available.
+    */
+   @Named("images:list")
+   @GET
+   @Path("/images/json")
+   @Fallback(Fallbacks.EmptySetOnNotFoundOr404.class)
+   Set<Image> listImages(ListImageOptions options);
+
+   /**
+    * Inspect an image
+    *
+    * @param imageName The id of the image to inspect.
+    * @return low-level information on the image name
+    */
+   @Named("image:inspect")
+   @GET
+   @Path("/images/{name}/json")
+   Image inspectImage(@PathParam("name") String imageName);
+
+   /**
+    * Create an image, either by pull it from the registry or by importing it
+    *
+    * @param options the configuration to create an image (@see 
CreateImageOptions)
+    * @return a stream of the image creation.
+    */
+   @Named("image:create")
+   @POST
+   @Path("/images/create")
+   InputStream createImage(CreateImageOptions options);
+
+   /**
+    * Delete an image.
+    *
+    * @param name the image name to be deleted
+    * @return the stream of the deletion execution.
+    */
+   @Named("image:delete")
+   @DELETE
+   @Path("/images/{name}")
+   InputStream deleteImage(@PathParam("name") String name);
+
+   /**
+    * Remove the image from the filesystem by name
+    *
+    * @param name the name of the image to be removed
+    * @param options the image deletion's options (@see DeleteImageOptions)
+    * @return the stream of the deletion execution.
+    */
+   @Named("image:delete")
+   @DELETE
+   @Path("/images/{name}")
+   InputStream deleteImage(@PathParam("name") String name, DeleteImageOptions 
options);
+
+   /**
+    * Build an image from Dockerfile via stdin
+    *
+    * @param inputStream The stream must be a tar archive compressed with one 
of the following algorithms: identity
+    *                    (no compression), gzip, bzip2, xz.
+    * @param options the image build's options (@see BuildOptions)
+    * @return a stream of the build execution
+    */
+   @Named("image:build")
+   @POST
+   @Path("/build")
+   @Headers(keys = "Content-Type", values = "application/tar")
+   InputStream build(Payload inputStream, BuildOptions options);
+
+   /**
+    * Build an image from Dockerfile via stdin
+    *
+    * @param dockerFile The file to be compressed with one of the following 
algorithms: identity, gzip, bzip2, xz.*
+    * @param options the image build's options (@see BuildOptions)
+    * @return a stream of the build execution
+    */
+   @Named("image:build")
+   @POST
+   @Path("/build")
+   @Headers(keys = "Content-Type", values = "application/tar")
+   InputStream build(@BinderParam(BindInputStreamToRequest.class) File 
dockerFile, BuildOptions options);
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/features/internal/Archives.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/features/internal/Archives.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/features/internal/Archives.java
new file mode 100644
index 0000000..43b69c3
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/features/internal/Archives.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.features.internal;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.collect.Iterables.getLast;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
+import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
+
+import com.google.common.base.Splitter;
+import com.google.common.io.Files;
+
+public class Archives {
+
+   public static File tar(File baseDir, String archivePath) throws IOException 
{
+      return tar(baseDir, new File(archivePath));
+   }
+
+   public static File tar(File baseDir, File tarFile) throws IOException {
+      // Check that the directory is a directory, and get its contents
+      checkArgument(baseDir.isDirectory(), "%s is not a directory", baseDir);
+      File[] files = baseDir.listFiles();
+      String token = 
getLast(Splitter.on("/").split(baseDir.getAbsolutePath()));
+      TarArchiveOutputStream tos = new TarArchiveOutputStream(new 
FileOutputStream(tarFile));
+      tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
+      try {
+         for (File file : files) {
+            TarArchiveEntry tarEntry = new TarArchiveEntry(file);
+            tarEntry.setName("/" + 
getLast(Splitter.on(token).split(file.toString())));
+            tos.putArchiveEntry(tarEntry);
+            if (!file.isDirectory()) {
+               Files.asByteSource(file).copyTo(tos);
+            }
+            tos.closeArchiveEntry();
+         }
+      } finally {
+         tos.close();
+      }
+      return tarFile;
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/handlers/DockerErrorHandler.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/handlers/DockerErrorHandler.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/handlers/DockerErrorHandler.java
new file mode 100644
index 0000000..72d3069
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/handlers/DockerErrorHandler.java
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.handlers;
+
+import java.io.IOException;
+
+import javax.annotation.Resource;
+
+import org.jclouds.http.HttpCommand;
+import org.jclouds.http.HttpErrorHandler;
+import org.jclouds.http.HttpResponse;
+import org.jclouds.http.HttpResponseException;
+import org.jclouds.logging.Logger;
+import org.jclouds.rest.AuthorizationException;
+import org.jclouds.rest.ResourceNotFoundException;
+import org.jclouds.util.Strings2;
+
+import com.google.common.base.Throwables;
+import com.google.common.io.Closeables;
+
+/**
+ * This will parse and set an appropriate exception on the command object.
+ * <p/>
+ * <p/>
+ * Errors are returned with an appropriate HTTP status code, an X-Elastic- 
Error header specifying
+ * the error type, and a text description in the HTTP body.
+ */
+public class DockerErrorHandler implements HttpErrorHandler {
+   @Resource
+   protected Logger logger = Logger.NULL;
+
+   public void handleError(HttpCommand command, HttpResponse response) {
+      // it is important to always read fully and close streams
+      String message = parseMessage(response);
+      Exception exception = message != null ? new 
HttpResponseException(command, response, message)
+              : new HttpResponseException(command, response);
+      try {
+         message = message != null ? message : String.format("%s -> %s", 
command.getCurrentRequest().getRequestLine(),
+                 response.getStatusLine());
+         switch (response.getStatusCode()) {
+            case 400:
+               if 
((command.getCurrentRequest().getEndpoint().getPath().endsWith("/info"))
+                       || (message != null && message.indexOf("could not be 
found") != -1))
+                  exception = new ResourceNotFoundException(message, 
exception);
+               else if (message != null && message.indexOf("currently in use") 
!= -1)
+                  exception = new IllegalStateException(message, exception);
+               else
+                  exception = new IllegalArgumentException(message, exception);
+               break;
+            case 401:
+               exception = new AuthorizationException(message, exception);
+               break;
+            case 402:
+               exception = new IllegalStateException(message, exception);
+               break;
+            case 404:
+               if (!command.getCurrentRequest().getMethod().equals("DELETE")) {
+                  exception = new ResourceNotFoundException(message, 
exception);
+               }
+               break;
+            case 405:
+               exception = new IllegalArgumentException(message, exception);
+               break;
+            case 409:
+               exception = new IllegalStateException(message, exception);
+               break;
+         }
+      } finally {
+         try {
+            Closeables.close(response.getPayload(), true);
+         } catch (IOException e) {
+            // This code will never be reached
+            throw Throwables.propagate(e);
+         }
+         command.setException(exception);
+      }
+   }
+
+   public String parseMessage(HttpResponse response) {
+      if (response.getPayload() == null)
+         return null;
+      try {
+         return Strings2.toStringAndClose(response.getPayload().openStream());
+      } catch (IOException e) {
+         throw Throwables.propagate(e);
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/BuildOptions.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/BuildOptions.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/BuildOptions.java
new file mode 100644
index 0000000..4d7196c
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/BuildOptions.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.options;
+
+import org.jclouds.http.options.BaseHttpRequestOptions;
+
+/**
+ * Options to customize image builder.
+ */
+public class BuildOptions extends BaseHttpRequestOptions {
+
+   public static final BuildOptions NONE = new BuildOptions();
+
+   public BuildOptions tag(String tag) {
+      this.queryParameters.put("tag", tag);
+      return this;
+   }
+
+   public BuildOptions verbose(Boolean verbose) {
+      this.queryParameters.put("verbose", verbose.toString());
+      return this;
+   }
+
+   public BuildOptions nocache(Boolean nocache) {
+      this.queryParameters.put("nocache", nocache.toString());
+      return this;
+   }
+
+   public static class Builder {
+
+      /**
+       * @see BuildOptions#tag
+       */
+      public static BuildOptions tag(String tag) {
+         BuildOptions options = new BuildOptions();
+         return options.tag(tag);
+      }
+
+      /**
+       * @see BuildOptions#verbose(Boolean)
+       */
+      public static BuildOptions verbose(Boolean verbose) {
+         BuildOptions options = new BuildOptions();
+         return options.verbose(verbose);
+      }
+
+      /**
+       * @see BuildOptions#nocache(Boolean)
+       */
+      public static BuildOptions nocache(Boolean nocache) {
+         BuildOptions options = new BuildOptions();
+         return options.nocache(nocache);
+      }
+
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/CommitOptions.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/CommitOptions.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/CommitOptions.java
new file mode 100644
index 0000000..5653fba
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/CommitOptions.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.options;
+
+import org.jclouds.http.options.BaseHttpRequestOptions;
+
+/**
+ * Options to customize image commit.
+ */
+public class CommitOptions extends BaseHttpRequestOptions {
+
+   public static final CommitOptions NONE = new CommitOptions();
+
+   public CommitOptions containerId(String containerId) {
+      this.queryParameters.put("containerId", containerId);
+      return this;
+   }
+
+   public CommitOptions repository(String repository) {
+      this.queryParameters.put("repository", repository);
+      return this;
+   }
+
+   public CommitOptions tag(String tag) {
+      this.queryParameters.put("tag", tag);
+      return this;
+   }
+
+   public CommitOptions message(String message) {
+      this.queryParameters.put("message", message);
+      return this;
+   }
+
+   public CommitOptions author(String author) {
+      this.queryParameters.put("author", author);
+      return this;
+   }
+
+   public CommitOptions run(String run) {
+      this.queryParameters.put("run", run);
+      return this;
+   }
+
+   public static class Builder {
+
+      /**
+       * @see CommitOptions#containerId
+       */
+      public static CommitOptions containerId(String containerId) {
+         CommitOptions options = new CommitOptions();
+         return options.containerId(containerId);
+      }
+
+      /**
+       * @see CommitOptions#repository
+       */
+      public static CommitOptions repository(String repository) {
+         CommitOptions options = new CommitOptions();
+         return options.repository(repository);
+      }
+
+      /**
+       * @see CommitOptions#tag
+       */
+      public static CommitOptions tag(String tag) {
+         CommitOptions options = new CommitOptions();
+         return options.tag(tag);
+      }
+
+      /**
+       * @see CommitOptions#message
+       */
+      public static CommitOptions message(String message) {
+         CommitOptions options = new CommitOptions();
+         return options.message(message);
+      }
+
+      /**
+       * @see CommitOptions#author
+       */
+      public static CommitOptions author(String author) {
+         CommitOptions options = new CommitOptions();
+         return options.author(author);
+      }
+
+      /**
+       * @see CommitOptions#run
+       */
+      public static CommitOptions run(String run) {
+         CommitOptions options = new CommitOptions();
+         return options.run(run);
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/CreateImageOptions.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/CreateImageOptions.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/CreateImageOptions.java
new file mode 100644
index 0000000..51dc399
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/CreateImageOptions.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.options;
+
+import org.jclouds.http.options.BaseHttpRequestOptions;
+
+/**
+ * Options to customize container creation.
+ */
+public class CreateImageOptions extends BaseHttpRequestOptions {
+
+   public static final CreateImageOptions NONE = new CreateImageOptions();
+
+   public CreateImageOptions fromImage(String fromImage) {
+      this.queryParameters.put("fromImage", fromImage);
+      return this;
+   }
+
+   public CreateImageOptions fromSrc(String fromSrc) {
+      this.queryParameters.put("fromSrc", fromSrc);
+      return this;
+   }
+
+   public CreateImageOptions repo(String repo) {
+      this.queryParameters.put("repo", repo);
+      return this;
+   }
+
+   public CreateImageOptions tag(String tag) {
+      this.queryParameters.put("tag", tag);
+      return this;
+   }
+
+   public CreateImageOptions registry(String registry) {
+      this.queryParameters.put("registry", registry);
+      return this;
+   }
+
+   public static class Builder {
+      /**
+       * @see CreateImageOptions#fromImage
+       */
+      public static CreateImageOptions fromImage(String fromImage) {
+         CreateImageOptions options = new CreateImageOptions();
+         return options.fromImage(fromImage);
+      }
+
+      /**
+       * @see CreateImageOptions#fromSrc
+       */
+      public static CreateImageOptions fromSrc(String fromSrc) {
+         CreateImageOptions options = new CreateImageOptions();
+         return options.fromSrc(fromSrc);
+      }
+
+      /**
+       * @see CreateImageOptions#repo
+       */
+      public static CreateImageOptions repo(String repo) {
+         CreateImageOptions options = new CreateImageOptions();
+         return options.repo(repo);
+      }
+
+      /**
+       * @see CreateImageOptions#tag
+       */
+      public static CreateImageOptions tag(String tag) {
+         CreateImageOptions options = new CreateImageOptions();
+         return options.tag(tag);
+      }
+
+      /**
+       * @see CreateImageOptions#registry
+       */
+      public static CreateImageOptions registry(String registry) {
+         CreateImageOptions options = new CreateImageOptions();
+         return options.registry(registry);
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/DeleteImageOptions.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/DeleteImageOptions.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/DeleteImageOptions.java
new file mode 100644
index 0000000..9438616
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/DeleteImageOptions.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.options;
+
+import org.jclouds.http.options.BaseHttpRequestOptions;
+
+/**
+ * Options to customize image deletion.
+ */
+public class DeleteImageOptions extends BaseHttpRequestOptions {
+
+   public static final DeleteImageOptions NONE = new DeleteImageOptions();
+
+   public DeleteImageOptions force(Boolean force) {
+      this.queryParameters.put("force", force.toString());
+      return this;
+   }
+
+   public static class Builder {
+
+      /**
+       * @see DeleteImageOptions#force
+       */
+      public static DeleteImageOptions force(Boolean force) {
+         DeleteImageOptions options = new DeleteImageOptions();
+         return options.force(force);
+      }
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/ListContainerOptions.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/ListContainerOptions.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/ListContainerOptions.java
new file mode 100644
index 0000000..af16664
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/ListContainerOptions.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.options;
+
+import org.jclouds.http.options.BaseHttpRequestOptions;
+
+/**
+ * Options to customize container's listing.
+ */
+public class ListContainerOptions extends BaseHttpRequestOptions {
+
+   public static final ListContainerOptions NONE = new ListContainerOptions();
+
+   public ListContainerOptions all(Boolean all) {
+      this.queryParameters.put("all", all.toString());
+      return this;
+   }
+
+   public ListContainerOptions limit(Integer limit) {
+      this.queryParameters.put("limit", limit.toString());
+      return this;
+   }
+
+   public ListContainerOptions since(Integer since) {
+      this.queryParameters.put("since", since.toString());
+      return this;
+   }
+
+   public ListContainerOptions before(Integer before) {
+      this.queryParameters.put("before", before.toString());
+      return this;
+   }
+
+   public ListContainerOptions size(Integer size) {
+      this.queryParameters.put("size", size.toString());
+      return this;
+   }
+
+   public static class Builder {
+
+      /**
+       * @see ListContainerOptions#all
+       */
+      public static ListContainerOptions all(Boolean all) {
+         ListContainerOptions options = new ListContainerOptions();
+         return options.all(all);
+      }
+
+      /**
+       * @see ListContainerOptions#limit(Integer)
+       */
+      public static ListContainerOptions limit(Integer limit) {
+         ListContainerOptions options = new ListContainerOptions();
+         return options.limit(limit);
+      }
+
+      /**
+       * @see ListContainerOptions#since(Integer)
+       */
+      public static ListContainerOptions since(Integer since) {
+         ListContainerOptions options = new ListContainerOptions();
+         return options.since(since);
+      }
+
+      /**
+       * @see ListContainerOptions#before(Integer)
+       */
+      public static ListContainerOptions before(Integer before) {
+         ListContainerOptions options = new ListContainerOptions();
+         return options.before(before);
+      }
+
+      /**
+       * @see ListContainerOptions#limit(Integer)
+       */
+      public static ListContainerOptions size(Integer size) {
+         ListContainerOptions options = new ListContainerOptions();
+         return options.size(size);
+      }
+
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/ListImageOptions.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/ListImageOptions.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/ListImageOptions.java
new file mode 100644
index 0000000..fab75d4
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/ListImageOptions.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.options;
+
+import org.jclouds.http.options.BaseHttpRequestOptions;
+
+/**
+ * Options to customize image's listing.
+ */
+public class ListImageOptions extends BaseHttpRequestOptions {
+
+   public static final ListImageOptions NONE = new ListImageOptions();
+
+   public ListImageOptions all(Boolean all) {
+      this.queryParameters.put("all", all.toString());
+      return this;
+   }
+
+   public static class Builder {
+      /**
+       * @see ListImageOptions#all
+       */
+      public static ListImageOptions all(Boolean all) {
+         ListImageOptions options = new ListImageOptions();
+         return options.all(all);
+      }
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/RemoveContainerOptions.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/RemoveContainerOptions.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/RemoveContainerOptions.java
new file mode 100644
index 0000000..5c3abba
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/RemoveContainerOptions.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.options;
+
+import org.jclouds.http.options.BaseHttpRequestOptions;
+
+/**
+ * Options to customize container removal.
+ */
+public class RemoveContainerOptions extends BaseHttpRequestOptions {
+
+   public static final RemoveContainerOptions NONE = new 
RemoveContainerOptions();
+
+   public RemoveContainerOptions verbose(Boolean verbose) {
+      this.queryParameters.put("verbose", verbose.toString());
+      return this;
+   }
+
+   public RemoveContainerOptions force(Boolean force) {
+      this.queryParameters.put("force", force.toString());
+      return this;
+   }
+
+   public static class Builder {
+      /**
+       * @see RemoveContainerOptions#verbose
+       */
+      public static RemoveContainerOptions verbose(Boolean verbose) {
+         RemoveContainerOptions options = new RemoveContainerOptions();
+         return options.verbose(verbose);
+      }
+
+      /**
+       * @see RemoveContainerOptions#force
+       */
+      public static RemoveContainerOptions force(Boolean force) {
+         RemoveContainerOptions options = new RemoveContainerOptions();
+         return options.force(force);
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata
new file mode 100644
index 0000000..ca1a6cb
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata
@@ -0,0 +1 @@
+org.jclouds.docker.DockerApiMetadata
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/DockerApiMetadataTest.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/DockerApiMetadataTest.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/DockerApiMetadataTest.java
new file mode 100644
index 0000000..41d00679
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/DockerApiMetadataTest.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+import org.jclouds.apis.ApiMetadata;
+import org.jclouds.apis.Apis;
+import org.jclouds.compute.internal.BaseComputeServiceApiMetadataTest;
+import org.testng.annotations.Test;
+
+/**
+ * Unit tests for the {@link DockerApiMetadata} class.
+ */
+@Test(groups = "unit", testName = "AbiquoApiMetadataTest")
+public class DockerApiMetadataTest extends BaseComputeServiceApiMetadataTest {
+
+   public DockerApiMetadataTest() {
+      super(new DockerApiMetadata());
+   }
+
+   public void testDockerApiRegistered() {
+      ApiMetadata api = Apis.withId("docker");
+
+      assertNotNull(api);
+      assertTrue(api instanceof DockerApiMetadata);
+      assertEquals(api.getId(), "docker");
+   }
+
+}
+

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/binders/BindInputStreamToRequestTest.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/binders/BindInputStreamToRequestTest.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/binders/BindInputStreamToRequestTest.java
new file mode 100644
index 0000000..a21999c
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/binders/BindInputStreamToRequestTest.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.binders;
+
+import com.google.common.io.CharStreams;
+import org.jclouds.http.HttpRequest;
+import org.testng.annotations.Test;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.AssertJUnit.assertTrue;
+
+@Test(groups = "unit", testName = "BindInputStreamToRequestTest")
+public class BindInputStreamToRequestTest {
+
+   @Test
+   public void testBindInputStreamToRequest() throws IOException {
+      BindInputStreamToRequest binder = new BindInputStreamToRequest();
+
+      HttpRequest request = 
HttpRequest.builder().method("GET").endpoint("http://test";).build();
+      request = binder.bindToRequest(request, 
File.createTempFile("dockerfile", ""));
+      String rawContent = CharStreams.toString(new 
InputStreamReader((FileInputStream) request.getPayload().getRawContent(), 
"UTF-8"));
+      assertTrue(rawContent.startsWith("Dockerfile"));
+      assertEquals(request.getPayload().getContentMetadata().getContentType(), 
"application/tar");
+   }
+
+   @Test(expectedExceptions = IllegalArgumentException.class)
+   public void testBindInputStreamToRequestWithObjectAsInput() throws 
IOException {
+      BindInputStreamToRequest binder = new BindInputStreamToRequest();
+
+      HttpRequest request = 
HttpRequest.builder().method("GET").endpoint("http://test";).build();
+      request = binder.bindToRequest(request, new Object());
+      String rawContent = CharStreams.toString(new 
InputStreamReader((FileInputStream) request.getPayload().getRawContent(), 
"UTF-8"));
+      assertTrue(rawContent.startsWith("Dockerfile"));
+      assertEquals(request.getPayload().getContentMetadata().getContentType(), 
"application/tar");
+   }
+
+   @Test(expectedExceptions = NullPointerException.class)
+   public void testBindInputStreamToRequestWithNullInput() throws IOException {
+      BindInputStreamToRequest binder = new BindInputStreamToRequest();
+
+      HttpRequest request = 
HttpRequest.builder().method("GET").endpoint("http://test";).build();
+      request = binder.bindToRequest(request, null);
+      String rawContent = CharStreams.toString(new 
InputStreamReader((FileInputStream) request.getPayload().getRawContent(), 
"UTF-8"));
+      assertTrue(rawContent.startsWith("Dockerfile"));
+      assertEquals(request.getPayload().getContentMetadata().getContentType(), 
"application/tar");
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/compute/BaseDockerApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/compute/BaseDockerApiLiveTest.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/compute/BaseDockerApiLiveTest.java
new file mode 100644
index 0000000..77115f2
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/compute/BaseDockerApiLiveTest.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.compute;
+
+import com.google.common.base.Charsets;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.io.CharStreams;
+import com.google.common.io.Closeables;
+import com.google.common.io.Files;
+import com.google.common.io.Resources;
+import com.google.inject.Module;
+import org.jclouds.Constants;
+import org.jclouds.apis.BaseApiLiveTest;
+import org.jclouds.docker.DockerApi;
+import org.jclouds.docker.features.internal.Archives;
+import org.jclouds.io.Payload;
+import org.jclouds.io.Payloads;
+import org.jclouds.sshj.config.SshjSshClientModule;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.Properties;
+
+@Test(groups = "live")
+public class BaseDockerApiLiveTest extends BaseApiLiveTest<DockerApi> {
+
+   public BaseDockerApiLiveTest() {
+      provider = "docker";
+   }
+
+   @Override
+   protected Iterable<Module> setupModules() {
+      return ImmutableSet.<Module>of(getLoggingModule(), new 
SshjSshClientModule());
+   }
+
+   @Override
+   protected Properties setupProperties() {
+      Properties overrides = super.setupProperties();
+      overrides.setProperty(Constants.PROPERTY_MAX_RETRIES, "15");
+      overrides.setProperty("jclouds.ssh.retry-auth", "true");
+      return overrides;
+   }
+
+   protected String consumeStream(InputStream stream, boolean 
swallowIOException) {
+      String result = null;
+      try {
+         result = CharStreams.toString(new InputStreamReader(stream, 
Charsets.UTF_8));
+         Closeables.close(stream, swallowIOException);
+      } catch (IOException e) {
+         Assert.fail();
+      }
+      return result;
+   }
+
+   protected Payload createPayload() throws IOException {
+      String folderPath = System.getProperty("user.dir") + 
"/docker/src/test/resources";
+      File parentDir = new File(folderPath + "/archive");
+      parentDir.mkdirs();
+      URL url = Resources.getResource("Dockerfile");
+      String content = Resources.toString(url, Charsets.UTF_8);
+      final File dockerfile = new File(parentDir.getAbsolutePath() + 
File.separator + "Dockerfile");
+      Files.write(content.getBytes(), dockerfile);
+      File archive = Archives.tar(parentDir, folderPath + 
"/archive/archive.tar");
+      FileInputStream data = new FileInputStream(archive);
+      Payload payload = Payloads.newInputStreamPayload(data);
+      payload.getContentMetadata().setContentLength(data.getChannel().size());
+      payload.getContentMetadata().setContentType("application/tar");
+      return payload;
+   }
+
+}

Reply via email to