Ver código fonte

添加 DockerController 管理本地 docker 镜像和容器

reghao 3 meses atrás
pai
commit
7523551abe

+ 49 - 0
web/src/main/java/cn/reghao/bnt/web/devops/build/controller/DockerController.java

@@ -0,0 +1,49 @@
+package cn.reghao.bnt.web.devops.build.controller;
+
+import cn.reghao.bnt.web.devops.build.model.vo.DockerContainer;
+import cn.reghao.bnt.web.devops.build.model.vo.DockerImage;
+import cn.reghao.bnt.web.devops.build.service.DockerService;
+import cn.reghao.jutil.web.WebResult;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2025-12-09 10:46:48
+ */
+@Tag(name = "Docker 仓库接口")
+@RestController
+@RequestMapping("/api/devops/build/docker")
+public class DockerController {
+    private final DockerService dockerService;
+
+    public DockerController(DockerService dockerService) {
+        this.dockerService = dockerService;
+    }
+
+    @Operation(summary = "获取 docker 镜像列表", description = "N")
+    @GetMapping(value = "/image/list", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String getDockerImage() {
+        List<DockerImage> list = dockerService.getDockerImages();
+        return WebResult.success(list);
+    }
+
+    @Operation(summary = "删除 docker 镜像", description = "N")
+    @PostMapping(value = "/image/delete", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String deleteDockerImage(String imageId) {
+        dockerService.rmDockerImage(imageId);
+        //dockerService.rmDockerContainer(imageId);
+        return WebResult.success();
+    }
+
+    @Operation(summary = "获取 docker 容器列表", description = "N")
+    @GetMapping(value = "/container/list", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String getDockerContainer() {
+        List<DockerContainer> list = dockerService.getDockerContainers();
+        return WebResult.success(list);
+    }
+}

+ 23 - 0
web/src/main/java/cn/reghao/bnt/web/devops/build/model/vo/DockerContainer.java

@@ -0,0 +1,23 @@
+package cn.reghao.bnt.web.devops.build.model.vo;
+
+import com.github.dockerjava.api.command.InspectContainerResponse;
+
+/**
+ * @author reghao
+ * @date 2025-12-09 11:01:46
+ */
+public class DockerContainer {
+    private String containerId;
+    private String name;
+    private String imageId;
+    private String createdAt;
+    private String status;
+
+    public DockerContainer(InspectContainerResponse inspectContainerResponse) {
+        this.containerId = inspectContainerResponse.getId();
+        this.name = inspectContainerResponse.getName();
+        this.imageId = inspectContainerResponse.getImageId();
+        this.createdAt = inspectContainerResponse.getCreated();
+        this.status = inspectContainerResponse.getState().getStatus();
+    }
+}

+ 20 - 0
web/src/main/java/cn/reghao/bnt/web/devops/build/model/vo/DockerImage.java

@@ -0,0 +1,20 @@
+package cn.reghao.bnt.web.devops.build.model.vo;
+
+import cn.reghao.jutil.jdk.converter.DateTimeConverter;
+import com.github.dockerjava.api.model.Image;
+
+/**
+ * @author reghao
+ * @date 2025-12-09 11:01:37
+ */
+public class DockerImage {
+    private String imageId;
+    private String repoTag;
+    private String createdAt;
+
+    public DockerImage(Image image) {
+        this.imageId = image.getId();
+        this.repoTag = image.getRepoTags().length > 0 ? image.getRepoTags()[0] : "<none>:<none>";
+        this.createdAt = DateTimeConverter.format(image.getCreated()*1000);
+    }
+}

+ 33 - 0
web/src/main/java/cn/reghao/bnt/web/devops/build/service/DockerService.java

@@ -0,0 +1,33 @@
+package cn.reghao.bnt.web.devops.build.service;
+
+import cn.reghao.bnt.common.docker.DockerImpl;
+import cn.reghao.bnt.web.devops.build.model.vo.DockerContainer;
+import cn.reghao.bnt.web.devops.build.model.vo.DockerImage;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author reghao
+ * @date 2025-12-09 11:01:17
+ */
+@Service
+public class DockerService {
+    private final DockerImpl docker = new DockerImpl();
+
+    public List<DockerImage> getDockerImages() {
+        return docker.images().stream().map(DockerImage::new).collect(Collectors.toList());
+    }
+
+    public void rmDockerImage(String imageId) {
+        docker.imageRm(imageId);
+    }
+
+    public List<DockerContainer> getDockerContainers() {
+        return docker.psAll().stream().map(DockerContainer::new).collect(Collectors.toList());
+    }
+
+    public void rmDockerContainer(String containerId) {
+    }
+}