Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
153 changes: 66 additions & 87 deletions src/main/java/com/github/dockerjava/client/DockerClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.io.StringWriter;
import java.net.URI;

import com.github.dockerjava.client.command.*;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.LineIterator;
import org.apache.http.client.HttpClient;
Expand All @@ -18,34 +19,6 @@
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.PoolingClientConnectionManager;

import com.github.dockerjava.client.command.AbstrDockerCmd;
import com.github.dockerjava.client.command.AttachContainerCmd;
import com.github.dockerjava.client.command.AuthCmd;
import com.github.dockerjava.client.command.BuildImgCmd;
import com.github.dockerjava.client.command.CommitCmd;
import com.github.dockerjava.client.command.ContainerDiffCmd;
import com.github.dockerjava.client.command.CopyFileFromContainerCmd;
import com.github.dockerjava.client.command.CreateContainerCmd;
import com.github.dockerjava.client.command.ImportImageCmd;
import com.github.dockerjava.client.command.InfoCmd;
import com.github.dockerjava.client.command.InspectContainerCmd;
import com.github.dockerjava.client.command.InspectImageCmd;
import com.github.dockerjava.client.command.KillContainerCmd;
import com.github.dockerjava.client.command.ListContainersCmd;
import com.github.dockerjava.client.command.ListImagesCmd;
import com.github.dockerjava.client.command.LogContainerCmd;
import com.github.dockerjava.client.command.PullImageCmd;
import com.github.dockerjava.client.command.PushImageCmd;
import com.github.dockerjava.client.command.RemoveContainerCmd;
import com.github.dockerjava.client.command.RemoveImageCmd;
import com.github.dockerjava.client.command.RestartContainerCmd;
import com.github.dockerjava.client.command.SearchImagesCmd;
import com.github.dockerjava.client.command.StartContainerCmd;
import com.github.dockerjava.client.command.StopContainerCmd;
import com.github.dockerjava.client.command.TagImageCmd;
import com.github.dockerjava.client.command.TopContainerCmd;
import com.github.dockerjava.client.command.VersionCmd;
import com.github.dockerjava.client.command.WaitContainerCmd;
import com.github.dockerjava.client.model.AuthConfig;
import com.github.dockerjava.client.model.CreateContainerConfig;
import com.github.dockerjava.client.utils.JsonClientFilter;
Expand All @@ -62,60 +35,67 @@
*/
public class DockerClient {

private Client client;
private WebResource baseResource;
private final CommandFactory cmdFactory;
private final WebResource baseResource;
private AuthConfig authConfig;


public DockerClient() throws DockerException {
this(Config.createConfig());
}

public DockerClient(String serverUrl) throws DockerException {
this(configWithServerUrl(serverUrl));
}

private static Config configWithServerUrl(String serverUrl)
throws DockerException {
final Config c = Config.createConfig();
c.url = URI.create(serverUrl);
return c;
}

public DockerClient(Config config) {
ClientConfig clientConfig = new DefaultClientConfig();

SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", config.url.getPort(),
PlainSocketFactory.getSocketFactory()));
schemeRegistry.register(new Scheme("https", 443, SSLSocketFactory
.getSocketFactory()));

PoolingClientConnectionManager cm = new PoolingClientConnectionManager(
schemeRegistry);
// Increase max total connection
cm.setMaxTotal(1000);
// Increase default max connection per route
cm.setDefaultMaxPerRoute(1000);

HttpClient httpClient = new DefaultHttpClient(cm);
client = new ApacheHttpClient4(new ApacheHttpClient4Handler(httpClient,
public DockerClient(Config config) {
this(config, null);
}

public DockerClient(Config config, CommandFactory cmdFactory) {
this.cmdFactory = cmdFactory;

HttpClient httpClient = getPoolingHttpClient(config);
ClientConfig clientConfig = new DefaultClientConfig();
Client client = new ApacheHttpClient4(new ApacheHttpClient4Handler(httpClient,
null, false), clientConfig);

// 1 hour
client.setReadTimeout(config.readTimeout);

client.addFilter(new JsonClientFilter());

if (config.enableLoggingFilter)
client.addFilter(new SelectiveLoggingFilter());

baseResource = client.resource(config.url + "/v" + config.version);
}


private HttpClient getPoolingHttpClient(Config config) {
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", config.url.getPort(),
PlainSocketFactory.getSocketFactory()));
schemeRegistry.register(new Scheme("https", 443, SSLSocketFactory
.getSocketFactory()));

PoolingClientConnectionManager cm = new PoolingClientConnectionManager(schemeRegistry);
// Increase max total connection
cm.setMaxTotal(1000);
// Increase default max connection per route
cm.setDefaultMaxPerRoute(1000);

public void setCredentials(String username, String password, String email) {
return new DefaultHttpClient(cm);
}


public void setCredentials(String username, String password, String email) {
if (username == null) {
throw new IllegalArgumentException("username is null");
}
Expand Down Expand Up @@ -168,27 +148,27 @@ private static AuthConfig authConfigFromProperties() throws DockerException {
* Authenticate with the server, useful for checking authentication.
*/
public AuthCmd authCmd() {
return new AuthCmd(authConfig()).withBaseResource(baseResource);
return cmdFactory.authCmd(authConfig()).withBaseResource(baseResource);
}

public InfoCmd infoCmd() throws DockerException {
return new InfoCmd().withBaseResource(baseResource);
return cmdFactory.infoCmd().withBaseResource(baseResource);
}

public VersionCmd versionCmd() throws DockerException {
return new VersionCmd().withBaseResource(baseResource);
return cmdFactory.versionCmd().withBaseResource(baseResource);
}

/**
* * IMAGE API *
*/

public PullImageCmd pullImageCmd(String repository) {
return new PullImageCmd(repository).withBaseResource(baseResource);
return cmdFactory.pullImageCmd(repository).withBaseResource(baseResource);
}

public PushImageCmd pushImageCmd(String name) {
return new PushImageCmd(name).withAuthConfig(authConfig())
return cmdFactory.pushImageCmd(name).withAuthConfig(authConfig())
.withBaseResource(baseResource);
}

Expand All @@ -198,110 +178,109 @@ public PushImageCmd pushImageCmd(String name) {

public ImportImageCmd importImageCmd(String repository,
InputStream imageStream) {
return new ImportImageCmd(repository, imageStream)
return cmdFactory.importImageCmd(repository, imageStream)
.withBaseResource(baseResource);
}

public SearchImagesCmd searchImagesCmd(String term) {
return new SearchImagesCmd(term).withBaseResource(baseResource);
return cmdFactory.searchImagesCmd(term).withBaseResource(baseResource);
}

public RemoveImageCmd removeImageCmd(String imageId) {
return new RemoveImageCmd(imageId).withBaseResource(baseResource);
return cmdFactory.removeImageCmd(imageId).withBaseResource(baseResource);
}

public ListImagesCmd listImagesCmd() {
return new ListImagesCmd().withBaseResource(baseResource);
return cmdFactory.listImagesCmd().withBaseResource(baseResource);
}

public InspectImageCmd inspectImageCmd(String imageId) {
return new InspectImageCmd(imageId).withBaseResource(baseResource);
return cmdFactory.inspectImageCmd(imageId).withBaseResource(baseResource);
}

/**
* * CONTAINER API *
*/

public ListContainersCmd listContainersCmd() {
return new ListContainersCmd().withBaseResource(baseResource);
return cmdFactory.listContainersCmd().withBaseResource(baseResource);
}

public CreateContainerCmd createContainerCmd(String image) {
return new CreateContainerCmd(new CreateContainerConfig()).withImage(
image).withBaseResource(baseResource);
return cmdFactory.createContainerCmd(image).withBaseResource(baseResource);
}

public StartContainerCmd startContainerCmd(String containerId) {
return new StartContainerCmd(containerId)
return cmdFactory.startContainerCmd(containerId)
.withBaseResource(baseResource);
}

public InspectContainerCmd inspectContainerCmd(String containerId) {
return new InspectContainerCmd(containerId)
return cmdFactory.inspectContainerCmd(containerId)
.withBaseResource(baseResource);
}

public RemoveContainerCmd removeContainerCmd(String containerId) {
return new RemoveContainerCmd(containerId)
return cmdFactory.removeContainerCmd(containerId)
.withBaseResource(baseResource);
}

public WaitContainerCmd waitContainerCmd(String containerId) {
return new WaitContainerCmd(containerId).withBaseResource(baseResource);
return cmdFactory.waitContainerCmd(containerId).withBaseResource(baseResource);
}

public AttachContainerCmd attachContainerCmd(String containerId) {
return new AttachContainerCmd(containerId).withBaseResource(baseResource);
return cmdFactory.attachContainerCmd(containerId).withBaseResource(baseResource);
}


public LogContainerCmd logContainerCmd(String containerId) {
return new LogContainerCmd(containerId).withBaseResource(baseResource);
return cmdFactory.logContainerCmd(containerId).withBaseResource(baseResource);
}

public CopyFileFromContainerCmd copyFileFromContainerCmd(
String containerId, String resource) {
return new CopyFileFromContainerCmd(containerId, resource)
return cmdFactory.copyFileFromContainerCmd(containerId, resource)
.withBaseResource(baseResource);
}

public ContainerDiffCmd containerDiffCmd(String containerId) {
return new ContainerDiffCmd(containerId).withBaseResource(baseResource);
return cmdFactory.containerDiffCmd(containerId).withBaseResource(baseResource);
}

public StopContainerCmd stopContainerCmd(String containerId) {
return new StopContainerCmd(containerId).withBaseResource(baseResource);
return cmdFactory.stopContainerCmd(containerId).withBaseResource(baseResource);
}

public KillContainerCmd killContainerCmd(String containerId) {
return new KillContainerCmd(containerId).withBaseResource(baseResource);
return cmdFactory.killContainerCmd(containerId).withBaseResource(baseResource);
}

public RestartContainerCmd restartContainerCmd(String containerId) {
return new RestartContainerCmd(containerId)
return cmdFactory.restartContainerCmd(containerId)
.withBaseResource(baseResource);
}

public CommitCmd commitCmd(String containerId) {
return new CommitCmd(containerId).withBaseResource(baseResource);
return cmdFactory.commitCmd(containerId).withBaseResource(baseResource);
}

public BuildImgCmd buildImageCmd(File dockerFolder) {
return new BuildImgCmd(dockerFolder).withBaseResource(baseResource);
return cmdFactory.buildImgCmd(dockerFolder).withBaseResource(baseResource);
}

public BuildImgCmd buildImageCmd(InputStream tarInputStream) {
return new BuildImgCmd(tarInputStream).withBaseResource(baseResource);
return cmdFactory.buildImgCmd(tarInputStream).withBaseResource(baseResource);
}

public TopContainerCmd topContainerCmd(String containerId) {
return new TopContainerCmd(containerId).withBaseResource(baseResource);
return cmdFactory.topContainerCmd(containerId).withBaseResource(baseResource);
}

public TagImageCmd tagImageCmd(String imageId, String repository, String tag) {
return new TagImageCmd(imageId, repository, tag).withBaseResource(baseResource);
return cmdFactory.tagImageCmd(imageId, repository, tag).withBaseResource(baseResource);
}


/**
* @return The output slurped into a string.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@

/**
* Attach to container
*
*
* @param logs - true or false, includes logs. Defaults to false.
*
*
* @param followStream
* - true or false, return stream. Defaults to false.
* @param stdout
Expand All @@ -42,7 +42,31 @@ public AttachContainerCmd(String containerId) {
withContainerId(containerId);
}

public AttachContainerCmd withContainerId(String containerId) {
public String getContainerId() {
return containerId;
}

public boolean hasLogsEnabled() {
return logs;
}

public boolean hasFollowStreamEnabled() {
return followStream;
}

public boolean hasTimestampsEnabled() {
return timestamps;
}

public boolean hasStdoutEnabled() {
return stdout;
}

public boolean hasStderrEnabled() {
return stderr;
}

public AttachContainerCmd withContainerId(String containerId) {
Preconditions.checkNotNull(containerId, "containerId was not specified");
this.containerId = containerId;
return this;
Expand Down Expand Up @@ -91,7 +115,7 @@ protected ClientResponse impl() throws DockerException {
params.add("timestamps", timestamps ? "1" : "0");
params.add("stdout", stdout ? "1" : "0");
params.add("stderr", stderr ? "1" : "0");
params.add("follow", followStream ? "1" : "0");
params.add("follow", followStream ? "1" : "0");

WebResource webResource = baseResource.path(
String.format("/containers/%s/attach", containerId))
Expand Down
Loading