内容目录
title: Docker-java使用记录
date: 2022-02-22 02:20:31.213
updated: 2022-02-22 02:33:58.773
url: https://ritoom.me/archives/docker-java使用记录
categories:
- Code
- Note
tags: - java
-
note
在工作中使用了这个库,目的是运行docker中的ctb-builder镜像,用于生成一些文件.
这种方法适用于运行docker中一些命令行等情形.
导入maven依赖
<dependency>
<groupId>com.github.docker-java</groupId>
<artifactId>docker-java</artifactId>
<version>3.2.12</version>
</dependency>
<dependency>
<groupId>com.github.docker-java</groupId>
<artifactId>docker-java-transport-httpclient5</artifactId>
<version>3.2.12</version>
</dependency>
<dependency>
<groupId>com.github.docker-java</groupId>
<artifactId>docker-java-core</artifactId>
<version>3.2.12</version>
</dependency>
建立docker-http客户端
DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
.withDockerHost("tcp://127.0.0.1:2375")
.build();
//使用Apache http客户端
DockerHttpClient httpClient = new ApacheDockerHttpClient.Builder()
.dockerHost(config.getDockerHost())
.maxConnections(100)
.connectionTimeout(Duration.ofSeconds(30))
.responseTimeout(Duration.ofSeconds(45))
.build();
DockerClient dockerClient = DockerClientImpl.getInstance(config, httpClient);
配置地址映射
Volume volume = new Volume("/root");
HostConfig hostConfig = new HostConfig()
.withBinds(new Bind(highFileDirectory,volume))
.withAutoRemove(true);
配置镜像命令
CreateContainerCmd createContainerCmd = dockerClient.createContainerCmd("homme/cesium-terrain-builder")
.withHostConfig(hostConfig)
.withStdinOpen(true)
.withTty(true)
.withCmd("ctb-tile","-o","/root","-s","14","-e","0","-r","nearest","-c","4","/root/"+highImage.getOriginalFilename());
启动容器
CreateContainerResponse container = createContainerCmd.exec();
dockerClient.startContainerCmd(container.getId()).exec();
配置等待容器执行完成自动销毁回调
WaitContainerResultCallback callback = new WaitContainerResultCallback();
dockerClient.waitContainerCmd(container.getId()).exec(callback);
callback.awaitCompletion();