利用docker java api操作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;
}
好的,以上就是操作的源码了,如有不妥之处,欢迎指正。