se-common/se-common-core/src/main/java/com/se/common/core/domain/DockerContainer.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
se-modules/se-docker/src/main/java/com/se/docker/controller/SysDockerController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
se-modules/se-docker/src/main/java/com/se/docker/service/SysDockerService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
se-modules/se-docker/src/main/java/com/se/docker/utils/DockerUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
说明.txt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
se-common/se-common-core/src/main/java/com/se/common/core/domain/DockerContainer.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,60 @@ package com.se.common.core.domain; @SuppressWarnings("ALL") public class DockerContainer { private String id; private String name; /** * running,created,exited,paused,restarting,dead,error */ private String state; /** * redis:latest */ private String image; public DockerContainer() { } public DockerContainer(String id, String name, String state, String image) { this.id = id; this.name = name; this.state = state; this.image = image; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getState() { return state; } public void setState(String state) { this.state = state; } public String getImage() { return image; } public void setImage(String image) { this.image = image; } } se-modules/se-docker/src/main/java/com/se/docker/controller/SysDockerController.java
@@ -29,7 +29,7 @@ return R.ok(str); } catch (Exception e) { log.error(e.getMessage(), e); return R.fail(); return R.fail(e.getMessage()); } } } se-modules/se-docker/src/main/java/com/se/docker/service/SysDockerService.java
@@ -2,25 +2,94 @@ 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 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() //æå¡å¨ip .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); ˵Ã÷.txt
@@ -111,3 +111,34 @@ kill -9 10086 url: jdbc:mysql://localhost:3306/se-cloud?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 -------------------------------------------------------- vi /etc/docker/daemon.json vim /lib/systemd/system/docker.service # é ç½®æ®é模å¼ï¼-Håæ°æå®dockeråºç¨ç¨åºç嬿¹å¼ï¼æè éç¨ä¸é¢çå®å ¨è¿æ¥æ¹å¼2é1 ExecStart=/usr/bin/dockerd -H unix://var/run/docker.sock -H tcp://0.0.0.0:2375 #é ç½®å®å ¨è¿æ¥ï¼æ³¨æè¿éç/home/user/certs/ æ ¹æ®èªå·±æ 嵿¿æ¢ä¸ºå®é ççå¯é¥åæ¾è·¯å¾ ExecStart=/usr/bin/dockerd -D --tlsverify=true --tlscert=/home/user/certs/server-cert.pem --tlskey=/home/user/certs/server-key.pem --tlscacert=/home/user/certs/ca.pem -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock #éè½½é ç½®ï¼éå¯æå¡ systemctl daemon-reload systemctl restart docker #æ¥ç端å£çå¬ netstat -nlp |grep 2375 firewall-cmd --permanent --zone=public --add-port=2375/tcp firewall-cmd --reload firewall-cmd --list-ports /se-cloud-se-redis-1 # se-docker-dev.yml docker: host: tcp://192.168.11.203:2375 apiVersion: 1.45 docker pause 7c5b33491640 docker unpause 7c5b33491640 --------------------------------------------------------