|
|
@@ -1,10 +1,15 @@
|
|
|
package cn.reghao.bnt.agent.task;
|
|
|
|
|
|
import cn.reghao.bnt.common.docker.Docker;
|
|
|
+import cn.reghao.bnt.common.machine.Machine;
|
|
|
+import cn.reghao.bnt.common.msg.MessageSender;
|
|
|
+import cn.reghao.bnt.common.msg.event.EvtTaskResult;
|
|
|
+import cn.reghao.jutil.jdk.event.message.EventMessage;
|
|
|
import com.github.dockerjava.api.command.InspectContainerResponse;
|
|
|
import com.github.dockerjava.api.model.Image;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
+import java.io.IOException;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -15,27 +20,59 @@ import java.util.stream.Collectors;
|
|
|
*/
|
|
|
@Slf4j
|
|
|
public class ImageCleanTask implements Runnable {
|
|
|
+ private final MessageSender messageSender;
|
|
|
private final Docker docker;
|
|
|
|
|
|
- public ImageCleanTask(Docker docker) {
|
|
|
+ public ImageCleanTask(MessageSender messageSender, Docker docker) {
|
|
|
+ this.messageSender = messageSender;
|
|
|
this.docker = docker;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void run() {
|
|
|
+ String result = "exec docker image clean task";
|
|
|
+ log.info("{}", result);
|
|
|
+ EvtTaskResult evtTaskResult = new EvtTaskResult(Machine.ID, result);
|
|
|
+ try {
|
|
|
+ EventMessage evtMsg = EventMessage.evt(evtTaskResult);
|
|
|
+ messageSender.send("", evtMsg);
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
Map<String, Image> map = docker.images().stream()
|
|
|
.collect(Collectors.toMap(Image::getId, image -> image));
|
|
|
|
|
|
+ // imageId -> container
|
|
|
+ Map<String, InspectContainerResponse> containerMap = docker.psAll().stream()
|
|
|
+ .collect(Collectors.toMap(InspectContainerResponse::getImageId, response -> response));
|
|
|
+
|
|
|
List<InspectContainerResponse> list = docker.psAll();
|
|
|
for (InspectContainerResponse response : list) {
|
|
|
String imageId = response.getImageId();
|
|
|
Boolean running = response.getState().getRunning();
|
|
|
if (running != null && running) {
|
|
|
Image image = map.remove(imageId);
|
|
|
+ try {
|
|
|
+ rmImage(image);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- //map.keySet().forEach(docker::imageRm);
|
|
|
- log.info("定时扫描 docker 镜像和容器");
|
|
|
+ private void rmImage(Image image) {
|
|
|
+ try {
|
|
|
+ String imageId = image.getId();
|
|
|
+ docker.imageRm(imageId);
|
|
|
+ String[] tags = image.getRepoTags();
|
|
|
+ String result = String.format("delete image %s", tags);
|
|
|
+ EvtTaskResult evtTaskResult = new EvtTaskResult(Machine.ID, result);
|
|
|
+ EventMessage evtMsg = EventMessage.evt(evtTaskResult);
|
|
|
+ messageSender.send("", evtMsg);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
}
|
|
|
}
|