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