|
|
@@ -1,11 +1,17 @@
|
|
|
package cn.reghao.bnt.web.devops;
|
|
|
|
|
|
+import cn.reghao.bnt.common.docker.Docker;
|
|
|
import cn.reghao.bnt.common.docker.DockerImpl;
|
|
|
-import com.github.dockerjava.api.model.Container;
|
|
|
+import cn.reghao.bnt.common.docker.po.ContainerInfo;
|
|
|
+import cn.reghao.bnt.common.docker.po.ImageInfo;
|
|
|
+import cn.reghao.jutil.jdk.thread.ThreadPoolWrapper;
|
|
|
import org.junit.Test;
|
|
|
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.ScheduledExecutorService;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
import java.util.regex.Pattern;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @author reghao
|
|
|
@@ -33,9 +39,36 @@ public class DockerTest {
|
|
|
public void dockerTest() {
|
|
|
DockerImpl docker = new DockerImpl();
|
|
|
|
|
|
- List<Container> list = docker.ps(true);
|
|
|
- list.forEach(container -> {
|
|
|
- container.getId();
|
|
|
- });
|
|
|
+ Map<String, ImageInfo> map = docker.images().stream().collect(Collectors.toMap(ImageInfo::getImageId, info -> info));
|
|
|
+ List<ContainerInfo> containerInfos = docker.psAll();
|
|
|
+ for (ContainerInfo containerInfo : containerInfos) {
|
|
|
+ String imageId = containerInfo.getImageId();
|
|
|
+ ImageInfo imageInfo = map.remove(imageId);
|
|
|
+ }
|
|
|
+ //map.keySet().forEach(docker::imageRm);
|
|
|
+
|
|
|
+ ImageCleanTask cleanTask = new ImageCleanTask(docker);
|
|
|
+ ScheduledExecutorService threadPool = ThreadPoolWrapper.scheduledThreadPool("image-cleaner", 1);
|
|
|
+ threadPool.scheduleAtFixedRate(cleanTask, 1, 12, TimeUnit.HOURS);
|
|
|
+ }
|
|
|
+
|
|
|
+ class ImageCleanTask implements Runnable {
|
|
|
+ private Docker docker;
|
|
|
+
|
|
|
+ public ImageCleanTask(Docker docker) {
|
|
|
+ this.docker = docker;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ Map<String, ImageInfo> map = docker.images().stream().collect(Collectors.toMap(ImageInfo::getImageId, info -> info));
|
|
|
+ List<ContainerInfo> containerInfos = docker.psAll();
|
|
|
+ for (ContainerInfo containerInfo : containerInfos) {
|
|
|
+ String imageId = containerInfo.getImageId();
|
|
|
+ ImageInfo imageInfo = map.remove(imageId);
|
|
|
+ }
|
|
|
+
|
|
|
+ //map.keySet().forEach(docker::imageRm);
|
|
|
+ }
|
|
|
}
|
|
|
}
|