1
13693261870
2024-12-09 3de9a70c67bd2949e0582a9b5345324d095d237b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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();
    }
}