JavaAPI 对Docker的系列操作

3,205 阅读1分钟

利用docker java api操作docker容器。 docker

引入两个jar:docker-java 和 docker-java-transport-okhttp

<dependency>
    <groupId>com.github.docker-java</groupId>
    <artifactId>docker-java</artifactId>
    <version>3.2.5</version>
</dependency>
<dependency>
    <groupId>com.github.docker-java</groupId>
    <artifactId>docker-java-transport-okhttp</artifactId>
    <version>3.2.5</version>
</dependency>

以下代码全部放在DockerProtocol.java中,方法中的代码均是精简后的,日志及异常处理已祛除。

public class DockerProtocol{
	private DockerClient dockerClient = null;
}

1.连接Docker

public void connectDocker() {
        DockerClientConfig dockerClientConfig = DefaultDockerClientConfig
                .createDefaultConfigBuilder()
                .build();
        DockerHttpClient httpClient = new OkDockerHttpClient.Builder()
                .dockerHost(dockerClientConfig.getDockerHost())
                .sslConfig(dockerClientConfig.getSSLConfig())
                .build();
        dockerClient = DockerClientImpl.getInstance(dockerClientConfig, httpClient);
    }

2.创建容器

// docker run ...
public String createContainer(String imageName,String containerName, HostConfig hostConfig, List<String> cmd){
	CreateContainerResponse container = dockerClient.createContainerCmd(imageName)
                    .withName(containerName)
                    .withHostConfig(hostConfig)
                    .withCmd(cmd)
                    .exec();
	return container.getId();
}

3.启动容器

public void startContainer(String containerId) {
	dockerClient.startContainerCmd(containerId).exec();
}

4.停止容器

// docker stop containerId
public void stopContainer(String containerId) {
	dockerClient.stopContainerCmd(containerId).exec();
}

5.移除容器

//docker rm containerId
public void removeContainer(String containerId) {
	dockerClient.removeContainerCmd(containerId).exec();
}

6.获取容器状态

//docker inspect containerId
 public InspectContainerResponse.ContainerState inspectContainerStatus(String containerId) {
 	InspectContainerResponse response = dockerClient.inspectContainerCmd(containerId).exec();
	return response.getState();
}

7.获取容器资源使用

// docker stats --no-stream containerId
//ContainerStatisticsInfo.java 中只有两个属性Statistics statistics 和 boolean ok
public ContainerStatisticsInfo containerState(String containerId) {
	CountDownLatch countDownLatch = new CountDownLatch(1);
        ContainerStatisticsInfo statistics =ContainerStatisticsInfo.builder().build();
        InvocationBuilder.AsyncResultCallback<Statistics> callback = new InvocationBuilder.AsyncResultCallback<Statistics>(){
            @Override
            public void onNext(Statistics object) {
                try {
                    statistics.setStatistics(object);
                    statistics.setOk(true);
                } finally {
                    countDownLatch.countDown();
                }
            }
        };
        dockerClient.statsCmd(containerId).withNoStream(true).exec(callback);
        countDownLatch.await(5000, TimeUnit.MILLISECONDS);
        return statistics;
}

好的,以上就是操作的源码了,如有不妥之处,欢迎指正。