package net.libertacasa.pubsh.web; import java.io.File; import java.time.Duration; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.command.BuildImageResultCallback; import com.github.dockerjava.api.command.InspectExecResponse.Container; import com.github.dockerjava.api.command.ListContainersCmd; import com.github.dockerjava.api.model.Image; import com.github.dockerjava.core.DefaultDockerClientConfig; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.core.DockerClientImpl; import com.github.dockerjava.httpclient5.ApacheDockerHttpClient; import com.github.dockerjava.transport.DockerHttpClient; public class Docker { static DockerClientConfig DockerConfig = DefaultDockerClientConfig.createDefaultConfigBuilder() .withDockerHost("tcp://sweetsuse:2375") .withDockerTlsVerify(false) .build(); static DockerHttpClient httpClient = new ApacheDockerHttpClient.Builder() .dockerHost(DockerConfig.getDockerHost()) .sslConfig(DockerConfig.getSSLConfig()) .maxConnections(100) .connectionTimeout(Duration.ofSeconds(30)) .responseTimeout(Duration.ofSeconds(45)) .build(); static DockerClient dockerClient = DockerClientImpl.getInstance(DockerConfig, httpClient); public static List getImageChecksums() { List imageQuery; List imageList; imageQuery = dockerClient.listImagesCmd().exec(); imageList = imageQuery.stream().map(Image::getId).collect(Collectors.toList()); return imageList; } public static List getImages() { List imageQuery; imageQuery = dockerClient.listImagesCmd().exec(); return imageQuery; } public static List getContainers() { List containerQuery; containerQuery = dockerClient.listContainersCmd().withShowAll(true).exec(); return containerQuery; } public static void deleteContainer(String id) { Collection stringifiedId = Arrays.asList(id); System.out.println(id); System.out.println(stringifiedId); List containerQuery = dockerClient.listContainersCmd().withShowAll(false).withIdFilter(stringifiedId).exec(); //apparently listContainersCmd returns a bunch of garbled crap, hence the less ideal toString/contains if(! containerQuery.toString().contains(id)) { System.out.println("Not found in running containers ..."); List containerQueryAll = dockerClient.listContainersCmd().withShowAll(true).withIdFilter(stringifiedId).exec(); if(containerQueryAll.toString().contains(id)) { System.out.println("Found in stopped containers ..."); } if(! containerQueryAll.toString().contains(id)) { System.out.println("Not found at all. The fuck."); } } if(containerQuery.toString().contains(id)) { System.out.println("Found in running containers, stopping ..."); dockerClient.stopContainerCmd(id).exec(); } //System.out.println(containerQuery); dockerClient.removeContainerCmd(id).exec(); } public static String buildImage(String targetUser, String osChoice, Integer count) { String dockerfile = "classpath:docker/Dockerfile-" + osChoice; String tag = targetUser + ":sh" + count; Set tags = new HashSet(); tags.add(tag); String imgid = dockerClient.buildImageCmd() .withDockerfile(new File(dockerfile)) .withPull(false).withNoCache(false).withTags(tags) .exec(new BuildImageResultCallback()).awaitImageId(); return(imgid); } }