package com.se.docker.service; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.command.*; import com.github.dockerjava.api.model.PullResponseItem; import com.github.dockerjava.core.DockerClientBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service @SuppressWarnings("ALL") public class SysDockerService { //@Value("${docker.prefix}") public String localFilePrefix; private static final Logger log = LoggerFactory.getLogger(SysDockerService.class); public String test() throws Exception { return "docker: " + System.currentTimeMillis(); } /** * 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(); } }