123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- package com.miniframe;
- import com.github.dockerjava.api.DockerClient;
- import com.github.dockerjava.api.async.ResultCallback;
- import com.github.dockerjava.api.command.CreateContainerResponse;
- import com.github.dockerjava.api.command.InspectContainerResponse;
- import com.github.dockerjava.api.command.LogContainerCmd;
- import com.github.dockerjava.api.command.PullImageResultCallback;
- import com.github.dockerjava.api.model.*;
- import com.github.dockerjava.core.DefaultDockerClientConfig;
- import com.github.dockerjava.core.DockerClientBuilder;
- import com.github.dockerjava.core.DockerClientConfig;
- import com.github.dockerjava.core.command.LogContainerResultCallback;
- import com.github.dockerjava.httpclient5.ApacheDockerHttpClient;
- import com.github.dockerjava.transport.DockerHttpClient;
- import com.miniframe.solverjob.DockerExe;
- import java.io.Closeable;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import static com.github.dockerjava.api.model.MountType.VOLUME;
- public class DockerTest {
- public static final String DOCKERHOST="tcp://192.168.0.132:2375/";
- public static final String APIVERSION="1.13.1";
- public static void main(String[] args) throws InterruptedException {
- // 初始化 Docker 客户端
- // System.out.println("容器已成功停止: " + getDocker(7182031)); ;
- DockerExe.stopDocker(982,"Water");
- }
- public static String getDocker(Integer aid){
- DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
- .withDockerHost(DOCKERHOST) // 设置 Docker 主机地址
- .withDockerTlsVerify(false) // 启用 TLS 验证
- .withApiVersion(APIVERSION) // 设置 API 版本
- .build();
- DockerHttpClient httpClient = new ApacheDockerHttpClient.Builder()
- .dockerHost(config.getDockerHost())
- .sslConfig(config.getSSLConfig())
- .build();
- DockerClient dockerClient = DockerClientBuilder.getInstance(config)
- .withDockerHttpClient(httpClient)
- .build();
- InspectContainerResponse containerInfo = dockerClient.inspectContainerCmd(aid.toString()).exec();
- return containerInfo.getState().getStatus();
- // if (containerInfo.getState().equals("exited")) {
- // System.out.println("容器已成功停止: " + aid.toString());
- // } else {
- // System.out.println("容器状态: " + containerInfo.getState());
- // }
- }
- private static void fireExec() {
- DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
- .withDockerHost("tcp://192.168.0.132:2375/") // 设置 Docker 主机地址
- .withDockerTlsVerify(false) // 启用 TLS 验证
- .withApiVersion("1.13.1") // 设置 API 版本
- .build();
- DockerHttpClient httpClient = new ApacheDockerHttpClient.Builder()
- .dockerHost(config.getDockerHost())
- .sslConfig(config.getSSLConfig())
- .build();
- DockerClient dockerClient = DockerClientBuilder.getInstance(config)
- .withDockerHttpClient(httpClient)
- .build();
- Mount zhtyVMount = new Mount()
- .withType(MountType.BIND)
- .withSource("/home/disaster/zhty/")
- .withTarget("/home/disaster/zhty/")
- .withReadOnly(false);
- Mount cephfsVMount = new Mount()
- .withType(MountType.BIND)
- .withSource("/cephfs/disaster/")
- .withTarget("/cephfs/disaster/")
- .withReadOnly(false);
- Mount runWaterMount = new Mount()
- .withType(MountType.BIND)
- .withSource("/cephfs/disaster/6/2054/fire/runFile.sh")
- .withTarget("/home/disaster/zhty/Fire/runFire.sh")
- .withReadOnly(false);
- List<Mount> am =new ArrayList<>();
- am.add(zhtyVMount);
- am.add(cephfsVMount);
- am.add(runWaterMount);
- //创建容器
- CreateContainerResponse container = dockerClient
- .createContainerCmd("fire:1.0")//镜像名称
- .withName("718201")//容器名称
- .withHostConfig(
- HostConfig.newHostConfig()
- .withMounts(am)
- ).exec();
- dockerClient.startContainerCmd(container.getId()).exec();
- System.out.println("容器启动成功,ID: " + container.getId());
- }
- private static void waterExec() throws InterruptedException {
- DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
- .withDockerHost("tcp://192.168.0.132:2375/") // 设置 Docker 主机地址
- .withDockerTlsVerify(false) // 启用 TLS 验证
- .withApiVersion("1.13.1") // 设置 API 版本
- .build();
- DockerHttpClient httpClient = new ApacheDockerHttpClient.Builder()
- .dockerHost(config.getDockerHost())
- .sslConfig(config.getSSLConfig())
- .build();
- DockerClient dockerClient = DockerClientBuilder.getInstance(config)
- .withDockerHttpClient(httpClient)
- .build();
- Mount zhtyVMount = new Mount()
- .withType(MountType.BIND)
- .withSource("/home/disaster/zhty/")
- .withTarget("/home/disaster/zhty/")
- .withReadOnly(false);
- Mount cephfsVMount = new Mount()
- .withType(MountType.BIND)
- .withSource("/cephfs/disaster/")
- .withTarget("/cephfs/disaster/")
- .withReadOnly(false);
- Mount runWaterMount = new Mount()
- .withType(MountType.BIND)
- .withSource("/cephfs/disaster/7/1820/water/runWater.sh")
- .withTarget("/home/disaster/zhty/Water/runWater.sh")
- .withReadOnly(false);
- List<Mount> am =new ArrayList<>();
- am.add(zhtyVMount);
- am.add(cephfsVMount);
- am.add(runWaterMount);
- //创建容器
- CreateContainerResponse container = dockerClient
- .createContainerCmd("water:1.0")//镜像名称
- .withName("718203")//容器名称
- .withHostConfig(
- HostConfig.newHostConfig()
- .withMounts(am)
- ).exec();
- dockerClient.startContainerCmd(container.getId()).exec();
- System.out.println("容器启动成功,ID: " + container.getId());
- // 获取容器日志
- LogContainerCmd logContainerCmd = dockerClient.logContainerCmd(container.getId())
- .withStdOut(true)
- .withStdErr(true)
- .withFollowStream(true);
- // 使用 ResultCallback.Adapter 处理日志
- logContainerCmd.exec(new ResultCallback.Adapter<Frame>() {
- @Override
- public void onNext(Frame frame) {
- System.out.print(new String(frame.getPayload()));
- super.onNext(frame);
- }
- @Override
- public void onError(Throwable throwable) {
- System.err.println("日志获取失败");
- throwable.printStackTrace();
- super.onError(throwable);
- }
- @Override
- public void onComplete() {
- System.out.println("日志获取完成");
- super.onComplete();
- }
- }).awaitCompletion();
- }
- private static void getLogs() throws InterruptedException {
- DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
- .withDockerHost("tcp://192.168.0.132:2375/") // 设置 Docker 主机地址
- .withDockerTlsVerify(false) // 启用 TLS 验证
- .withApiVersion("1.13.1") // 设置 API 版本
- .build();
- DockerHttpClient httpClient = new ApacheDockerHttpClient.Builder()
- .dockerHost(config.getDockerHost())
- .sslConfig(config.getSSLConfig())
- .build();
- DockerClient dockerClient = DockerClientBuilder.getInstance(config)
- .withDockerHttpClient(httpClient)
- .build();
- // 获取容器日志
- LogContainerCmd logContainerCmd = dockerClient.logContainerCmd("718203")
- .withStdOut(true)
- .withStdErr(true)
- .withFollowStream(true);
- // 使用 ResultCallback.Adapter 处理日志
- logContainerCmd.exec(new ResultCallback.Adapter<Frame>() {
- @Override
- public void onNext(Frame frame) {
- System.out.print(new String(frame.getPayload()));
- super.onNext(frame);
- }
- @Override
- public void onError(Throwable throwable) {
- System.err.println("日志获取失败");
- throwable.printStackTrace();
- super.onError(throwable);
- }
- @Override
- public void onComplete() {
- System.out.println("日志获取完成");
- super.onComplete();
- }
- }).awaitCompletion();
- System.out.println("1111日志获取完成");
- }
- }
|