| | |
| | | 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(); |
| | | } |
| | | } |