From bc6efc5c5103d61c9d13313e41e2344e8baf4b7e Mon Sep 17 00:00:00 2001 From: Georg Pfuetzenreuter Date: Sat, 7 May 2022 18:37:24 +0200 Subject: Checkpoint: Image deletion interface Signed-off-by: Georg Pfuetzenreuter --- .../java/net/libertacasa/pubsh/web/Docker.java | 47 +++++++++++++++++++++- 1 file changed, 45 insertions(+), 2 deletions(-) (limited to 'src/main/java/net/libertacasa/pubsh/web/Docker.java') diff --git a/src/main/java/net/libertacasa/pubsh/web/Docker.java b/src/main/java/net/libertacasa/pubsh/web/Docker.java index 1460bb3..6912d1b 100644 --- a/src/main/java/net/libertacasa/pubsh/web/Docker.java +++ b/src/main/java/net/libertacasa/pubsh/web/Docker.java @@ -1,17 +1,25 @@ package net.libertacasa.pubsh.web; import java.io.File; +import java.nio.file.Path; import java.time.Duration; +import java.util.ArrayList; 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 org.springframework.core.io.ClassPathResource; + import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.command.BuildImageResultCallback; +import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.command.InspectExecResponse.Container; import com.github.dockerjava.api.command.ListContainersCmd; +import com.github.dockerjava.api.command.ListImagesCmd; +import com.github.dockerjava.api.command.WaitContainerResultCallback; import com.github.dockerjava.api.model.Image; import com.github.dockerjava.core.DefaultDockerClientConfig; import com.github.dockerjava.core.DockerClientConfig; @@ -82,8 +90,11 @@ public class Docker { } public static String buildImage(String targetUser, String osChoice, Integer count) { - String dockerfile = "classpath:docker/Dockerfile-" + osChoice; - String tag = targetUser + ":sh" + count; + String dockerfile = "/home/georg/tmp/docker/Dockerfile_" + osChoice; + String tag = targetUser + ":sh" + count; + if (! new File(dockerfile).exists()) { + System.out.printf("\nInvalid Dockerfile: %s\n", dockerfile); + } Set tags = new HashSet(); tags.add(tag); String imgid = dockerClient.buildImageCmd() @@ -91,7 +102,39 @@ public class Docker { .withPull(false).withNoCache(false).withTags(tags) .exec(new BuildImageResultCallback()).awaitImageId(); + System.out.printf("\nBuilt image with ID %s", imgid); return(imgid); } + + public static void deleteImage(String username, String id) { + List imagequery = Docker.getImages(); + + if (imagequery.toString().contains(id)) { + System.out.printf("\nFound image ID %s, deleting ...", id); + dockerClient.removeImageCmd(id).withImageId(id).exec(); + } + if (! imagequery.toString().contains(id)) { + System.out.printf("\nImage ID %s not found.", id); + } + + } + + public static String createContainer(String imgid) { + //String containerid = dockerClient.createContainerCmd(imgid).exec(); + WaitContainerResultCallback resultCallback = new WaitContainerResultCallback(); + CreateContainerResponse createContainerResponse = dockerClient.createContainerCmd(imgid).exec(); + dockerClient.waitContainerCmd(createContainerResponse.getId()).exec(resultCallback); + try { + resultCallback.awaitCompletion(); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + String containerid = createContainerResponse.getId(); + //System.out.println(dockerClient.infoCmd().exec()); + + System.out.printf("\nCreated container with ID %s from image ID %s", containerid, imgid); + return(containerid); + } } -- cgit v1.2.3