From d877ac3faecbee5ed64bc23665347d14706663c9 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期二, 24 十二月 2024 16:04:29 +0800
Subject: [PATCH] 操作docker容器

---
 se-modules/se-docker/src/main/java/com/se/docker/service/SysDockerService.java |  157 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 155 insertions(+), 2 deletions(-)

diff --git a/se-modules/se-docker/src/main/java/com/se/docker/service/SysDockerService.java b/se-modules/se-docker/src/main/java/com/se/docker/service/SysDockerService.java
index 4de57df..4ff3a04 100644
--- a/se-modules/se-docker/src/main/java/com/se/docker/service/SysDockerService.java
+++ b/se-modules/se-docker/src/main/java/com/se/docker/service/SysDockerService.java
@@ -1,15 +1,168 @@
 package com.se.docker.service;
 
+import com.github.dockerjava.api.DockerClient;
+import com.github.dockerjava.api.command.*;
+import com.github.dockerjava.api.model.Container;
+import com.github.dockerjava.api.model.PullResponseItem;
+import com.github.dockerjava.core.DockerClientBuilder;
+import com.se.common.core.domain.DockerContainer;
+import com.se.docker.utils.DockerUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 @Service
 @SuppressWarnings("ALL")
 public class SysDockerService {
-    //@Value("${docker.prefix}")
-    public String localFilePrefix;
+    @Value("${docker.host}")
+    private String host;
+
+    @Value("${docker.apiVersion}")
+    private String apiVersion;
+
+    private static DockerUtils dockerUtils;
+
+    private static final Logger log = LoggerFactory.getLogger(SysDockerService.class);
+
+    public DockerUtils getDockerUtils() {
+        if (null == dockerUtils) {
+            dockerUtils = new DockerUtils(host, apiVersion);
+        }
+
+        return dockerUtils;
+    }
 
     public String test() throws Exception {
+        List<String> names = new ArrayList<>(Arrays.asList("se-redis", "se-mysql", "se-system", "se-wgcloud"));
+        List<DockerContainer> list = getContainers(names);
+
+        String id = list.get(0).getId();
+        start(id);
+        pause(id);
+        unpause(id);
+        stop(id);
+        restart(id);
+
         return "docker: " + System.currentTimeMillis();
     }
+
+    public List<DockerContainer> getContainers(List<String> names) {
+        DockerUtils util = getDockerUtils();
+        List<Container> containers = util.listContainers();
+
+        List<DockerContainer> list = new ArrayList<>();
+        for (Container container : containers) {
+            if (null == container.getNames() || 0 == container.getNames().length) continue;
+
+            String containerName = container.getNames()[0];
+            for (String name : names) {
+                if (containerName.contains(name)) {
+                    list.add(new DockerContainer(container.getId(), containerName, container.getState(), container.getImage()));
+                    break;
+                }
+            }
+        }
+        return list;
+    }
+
+    public void start(String id) {
+        getDockerUtils().start(id);
+    }
+
+    public void restart(String id) {
+        getDockerUtils().restart(id);
+    }
+
+    public void stop(String id) {
+        getDockerUtils().stop(id);
+    }
+
+    public void pause(String id) {
+        getDockerUtils().pause(id);
+    }
+
+    public void unpause(String id) {
+        getDockerUtils().unpause(id);
+    }
+
+    /**
+     * java DockerClient鎿嶄綔
+     * https://blog.csdn.net/weixin_45198228/article/details/130060333
+     */
+    public void t() {
+        try {
+            // 鍒涘缓Docker瀹㈡埛绔疄渚�
+            DockerClient dockerClient = DockerClientBuilder.getInstance("unix:///var/run/docker.sock").build();
+
+            // 鍒涘缓骞跺惎鍔ㄤ竴涓柊鐨勫鍣�
+            CreateContainerResponse container = dockerClient.createContainerCmd("busybox")
+                    .withCmd("echo", "Hello Docker!")
+                    .exec();
+
+            // 鍚姩瀹瑰櫒
+            dockerClient.startContainerCmd(container.getId()).exec();
+
+            // 妫�鏌ュ鍣ㄧ姸鎬�
+            InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec();
+            System.out.println(inspectContainerResponse.toString());
+
+            // 鍋滄骞剁Щ闄ゅ鍣�
+            dockerClient.removeContainerCmd(container.getId()).withRemoveVolumes(true).exec();
+
+            // 鍏抽棴Docker瀹㈡埛绔�
+            dockerClient.close();
+        } catch (Exception ex) {
+            log.error(ex.getMessage(), ex);
+        }
+    }
+
+    public void s() throws Exception {
+        // 鑾峰彇榛樿鐨� Docker Client
+        DockerClient dockerClient = DockerClientBuilder.getInstance().build();
+
+        // 鎷夊彇闀滃儚
+        String image = "openjdk:8-alpine";
+        PullImageCmd pullImageCmd = dockerClient.pullImageCmd(image);
+        PullImageResultCallback pullImageResultCallback = new PullImageResultCallback() {
+            @Override
+            public void onNext(PullResponseItem item) {
+                System.out.println("涓嬭浇闀滃儚锛�" + item.getStatus());
+                super.onNext(item);
+            }
+        };
+        pullImageCmd
+                .exec(pullImageResultCallback)
+                .awaitCompletion();
+        System.out.println("涓嬭浇瀹屾垚");
+
+        // 鍒涘缓瀹瑰櫒
+        CreateContainerCmd containerCmd = dockerClient.createContainerCmd(image);
+        CreateContainerResponse createContainerResponse = containerCmd
+                .withCmd("echo", "Hello Docker")
+                .exec();
+        System.out.println(createContainerResponse);
+
+        // 鍚姩瀹瑰櫒
+        String containerId = "";
+        dockerClient.startContainerCmd(containerId).exec();
+
+        // 鏋勫缓鍋滄瀹瑰櫒鐨勫懡浠�
+        StopContainerCmd stopContainerCmd = dockerClient.stopContainerCmd(containerId);
+        // 鎵ц鍛戒护
+        stopContainerCmd.exec();
+
+        // 鍒犻櫎瀹瑰櫒
+        dockerClient.removeContainerCmd(containerId).withForce(true).exec();
+
+        // 鍒犻櫎闀滃儚
+        dockerClient.removeImageCmd(image).exec();
+
+        // 閲嶅惎瀹瑰櫒
+        dockerClient.restartContainerCmd(containerId).exec();
+    }
 }

--
Gitblit v1.9.3