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