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