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/utils/DockerUtils.java |  164 +++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 112 insertions(+), 52 deletions(-)

diff --git a/se-modules/se-docker/src/main/java/com/se/docker/utils/DockerUtils.java b/se-modules/se-docker/src/main/java/com/se/docker/utils/DockerUtils.java
index 9530b38..ea016c4 100644
--- a/se-modules/se-docker/src/main/java/com/se/docker/utils/DockerUtils.java
+++ b/se-modules/se-docker/src/main/java/com/se/docker/utils/DockerUtils.java
@@ -59,14 +59,45 @@
     private DockerUtils() {
     }
 
-    private DockerUtils(String dockerHost, String dockerApiVersion, String dockerCertPath) {
+    public DockerUtils(String dockerHost, String dockerApiVersion) {
         Objects.requireNonNull(dockerHost, "Docker 涓绘満鍦板潃涓嶈兘涓虹┖.");
         Objects.requireNonNull(dockerApiVersion, "Docker API 鐗堟湰涓嶈兘涓虹┖.");
 
         // 浣跨敤鍙岄噸鏍¢獙閿佸疄鐜� Docker 瀹㈡埛绔崟渚�
-        if (dockerClient == null) {
+        if (null == dockerClient) {
             synchronized (DockerUtils.class) {
-                if (dockerClient == null) {
+                if (null == dockerClient) {
+                    dockerClient = createDockerClient(dockerHost, dockerApiVersion);
+                }
+            }
+        }
+    }
+
+    private DockerClient createDockerClient(String dockerHost, String dockerApiVersion) {
+        DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
+                .withApiVersion(dockerApiVersion)
+                .withDockerHost(dockerHost)
+                .build();
+
+        DockerHttpClient httpClient = new ApacheDockerHttpClient.Builder()
+                .dockerHost(config.getDockerHost())
+                .sslConfig(config.getSSLConfig())
+                .maxConnections(1000)
+                .connectionTimeout(Duration.ofSeconds(60))
+                .responseTimeout(Duration.ofMinutes(30))
+                .build();
+
+        return DockerClientImpl.getInstance(config, httpClient);
+    }
+
+    public DockerUtils(String dockerHost, String dockerApiVersion, String dockerCertPath) {
+        Objects.requireNonNull(dockerHost, "Docker 涓绘満鍦板潃涓嶈兘涓虹┖.");
+        Objects.requireNonNull(dockerApiVersion, "Docker API 鐗堟湰涓嶈兘涓虹┖.");
+
+        // 浣跨敤鍙岄噸鏍¢獙閿佸疄鐜� Docker 瀹㈡埛绔崟渚�
+        if (null == dockerClient) {
+            synchronized (DockerUtils.class) {
+                if (null == dockerClient) {
                     dockerClient = createDockerClient(dockerHost, dockerApiVersion, dockerCertPath);
                 }
             }
@@ -77,7 +108,7 @@
         DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
                 .withApiVersion(dockerApiVersion)
                 .withDockerHost(dockerHost)
-                //濡傛灉寮�鍚畨鍏ㄨ繛鎺ワ紝闇�瑕侀厤缃繖琛�
+                // 濡傛灉寮�鍚畨鍏ㄨ繛鎺ワ紝闇�瑕侀厤缃繖琛�
                 .withDockerTlsVerify(true).withDockerCertPath(dockerCertPath)
                 .build();
 
@@ -201,6 +232,28 @@
     }
 
     /**
+     * 鎺ㄩ�侀暅鍍�
+     *
+     * @param authConfig
+     * @param tag
+     */
+    public static void pushImage(AuthConfig authConfig, String tag) {
+        Objects.requireNonNull(authConfig, "璁よ瘉淇℃伅涓嶈兘涓虹┖.");
+        Objects.requireNonNull(tag, "闀滃儚淇℃伅涓嶈兘涓虹┖.");
+        log.info("寮�濮嬫帹閫� Docker 闀滃儚: {}", tag);
+        try {
+            PushImageCmd pushImageCmd = dockerClient.pushImageCmd(tag);
+            pushImageCmd.withAuthConfig(authConfig)
+                    .start()
+                    .awaitCompletion(30, TimeUnit.SECONDS);
+            log.info("闀滃儚push鎴愬姛:{}", tag);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("闀滃儚push澶辫触锛歿}" + e.getMessage());
+        }
+    }
+
+    /**
      * 鑾峰彇鎵�鏈� Docker 瀹瑰櫒鐨勪俊鎭�
      *
      * @return 鎵�鏈� Docker 瀹瑰櫒鐨勪俊鎭垪琛�
@@ -209,6 +262,7 @@
         log.info("寮�濮嬭幏鍙栨墍鏈� Docker 瀹瑰櫒淇℃伅.");
         try {
             ListContainersCmd listContainersCmd = dockerClient.listContainersCmd();
+            listContainersCmd.withShowAll(true);
             return listContainersCmd.exec();
         } catch (Exception e) {
             log.error("鑾峰彇鎵�鏈� Docker 瀹瑰櫒淇℃伅澶辫触: {}", e.getMessage());
@@ -243,28 +297,6 @@
     }
 
     /**
-     * 鎺ㄩ�侀暅鍍�
-     *
-     * @param authConfig
-     * @param tag
-     */
-    public static void pushImage(AuthConfig authConfig, String tag) {
-        Objects.requireNonNull(authConfig, "璁よ瘉淇℃伅涓嶈兘涓虹┖.");
-        Objects.requireNonNull(tag, "闀滃儚淇℃伅涓嶈兘涓虹┖.");
-        log.info("寮�濮嬫帹閫� Docker 闀滃儚: {}", tag);
-        try {
-            PushImageCmd pushImageCmd = dockerClient.pushImageCmd(tag);
-            pushImageCmd.withAuthConfig(authConfig)
-                    .start()
-                    .awaitCompletion(30, TimeUnit.SECONDS);
-            log.info("闀滃儚push鎴愬姛:{}", tag);
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new RuntimeException("闀滃儚push澶辫触锛歿}" + e.getMessage());
-        }
-    }
-
-    /**
      * 鑾峰彇闀滃儚Id
      *
      * @param tag
@@ -282,33 +314,64 @@
             e.printStackTrace();
             throw new RuntimeException("鏃犳硶鑾峰彇闀滃儚淇℃伅锛�" + e.getMessage());
         }
-
     }
 
-    // 浣跨敤 Builder 妯″紡鏋勫缓 DockerUtil 瀵硅薄
-    public static class Builder {
+    public void start(String id) {
+        try {
+            InspectContainerResponse resp = dockerClient.inspectContainerCmd(id).exec();
+            if (null == resp) return;
 
-        private String dockerHost;
-        private String dockerApiVersion;
-        private String dockerCertPath;
-
-        public Builder withDockerHost(String dockerHost) {
-            this.dockerHost = dockerHost;
-            return this;
+            dockerClient.startContainerCmd(id).exec();
+        } catch (Exception ex) {
+            log.error(ex.getMessage(), ex);
         }
+    }
 
-        public Builder withDockerApiVersion(String dockerApiVersion) {
-            this.dockerApiVersion = dockerApiVersion;
-            return this;
+    public void restart(String id) {
+        try {
+            InspectContainerResponse resp = dockerClient.inspectContainerCmd(id).exec();
+            if (null == resp) return;
+
+            dockerClient.restartContainerCmd(id).exec();
+        } catch (Exception ex) {
+            log.error(ex.getMessage(), ex);
         }
+    }
 
-        public Builder withDockerCertPath(String dockerCertPath) {
-            this.dockerCertPath = dockerCertPath;
-            return this;
+    public void stop(String id) {
+        try {
+            InspectContainerResponse resp = dockerClient.inspectContainerCmd(id).exec();
+            if (null == resp) return;
+
+            dockerClient.stopContainerCmd(id).exec();
+        } catch (Exception ex) {
+            log.error(ex.getMessage(), ex);
         }
+    }
 
-        public DockerUtils build() {
-            return new DockerUtils(dockerHost, dockerApiVersion, dockerCertPath);
+    public void pause(String id) {
+        try {
+            InspectContainerResponse resp = dockerClient.inspectContainerCmd(id).exec();
+            if (null == resp) return;
+
+            if (null != resp.getState().getRunning() && resp.getState().getRunning()) {
+                dockerClient.pauseContainerCmd(id).exec();
+            }
+        } catch (Exception ex) {
+            log.error(ex.getMessage(), ex);
+        }
+    }
+
+    public void unpause(String id) {
+        try {
+            InspectContainerResponse resp = dockerClient.inspectContainerCmd(id).exec();
+            if (null == resp) return;
+
+            if (null != resp.getState().getPaused() && resp.getState().getPaused()) {
+                dockerClient.unpauseContainerCmd(id).exec();
+            }
+        } catch (Exception ex) {
+            log.error(ex.getMessage(), ex);
         }
     }
 
@@ -319,14 +382,11 @@
                 .withUsername("admin")
                 .withPassword("admin123");
 
-        DockerUtils dockerUtil = new DockerUtils.Builder()
-                //鏈嶅姟鍣╥p
-                .withDockerHost("tcp://10.50.80.165:2375")
-                //API鐗堟湰 鍙�氳繃鍦ㄦ湇鍔″櫒 docker version 鍛戒护鏌ョ湅
-                .withDockerApiVersion("1.41")
-                //瀹夊叏杩炴帴瀵嗛挜鏂囦欢瀛樻斁璺緞
-                .withDockerCertPath("/home/user/certs/")
-                .build();
+        DockerUtils dockerUtil = new DockerUtils(
+                "tcp://192.168.11.203:2375",
+                "1.45",
+                "/home/user/certs/");
+
         //鐧诲綍
         dockerUtil.login(authConfig);
 

--
Gitblit v1.9.3