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