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.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 names = new ArrayList<>(Arrays.asList("se-redis", "se-mysql", "se-system", "se-wgcloud")); List 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 getContainers(List names) { DockerUtils util = getDockerUtils(); List containers = util.listContainers(); List 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(); } }