编程 · 2022年2月22日 0

Docker-java使用记录-docker-java使用记录

内容目录

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();