Java API 操作Docker

Java API 操作Docker


docker API:https://docs.docker.com/engine/api/v1.37/#operation/ContainerResize
在这里插入图片描述

java 调取docker api 进行操作docker,下面是具体的接口和实现类
我的具体接口地址为:http://ip:7004/v1.37 ,版本:v1.37

//查询容器列表
JSONArray query();
//创建容器
String create(String no , Map<String,Object> map);
//查询容器详细参数
String inspect(String id);
//启动容器
void start(String no,String id);
//停止容器
void stop(String no,String id);
//重启容器
void restart(String id);
//kill 容器
void kill(String id);
//暂停
void pause(String id);
//删除
void remove(String no,String id);
//获取运行状态
String getStatus(String id);

具体的实现类如下:

@Autowired
    RestTemplate restTemplate;

    @Autowired
    DockerConfig dockerConfig;

    @Autowired
    EvaluationService evaluationService;

    @Override
    public JSONArray query() {
        String url = dockerConfig.getUrl() + "/containers/json";
        ResponseEntity<JSONArray> resp = restTemplate.exchange(url, HttpMethod.GET,null,
                new ParameterizedTypeReference<JSONArray>(){});
        JSONArray result = resp.getBody();
        return result;
    }

    @Override
    public String create(String name,Map<String,Object> param) {
        String url = dockerConfig.getUrl() + "/containers/create?name="+name;
        HttpEntity<Map<String,Object>> entity = new HttpEntity<>(param);
        ResponseEntity<Map> resp = restTemplate.exchange(url, HttpMethod.POST,entity, new ParameterizedTypeReference<Map>(){});
        Map<String,String> map = resp.getBody();
        if (resp.getStatusCode().value() == 201){
            return map.get("Id");
        }else {
            log.error("容器创建失败:code={} message={}",resp.getStatusCodeValue(),map.get("message"));
            //状态修改ERR
            evaluationService.modifyStatusByNo(name, EvaluationState.Error);
            Asserts.isTrue(false, ERROR_CODE.CONTAINER_CREATE_FAIL);
        }
        return "";
    }

    @Override
    public void start(String no,String id) {
        String url = dockerConfig.getUrl() + "/containers/"+id+"/start";
        HttpEntity<Object> entity = new HttpEntity<>(null);
        ResponseEntity<String> resp = restTemplate.exchange(url, HttpMethod.POST,entity, new ParameterizedTypeReference<String>(){});
        if (resp.getStatusCode().value() != 204){
            //状态修改ERR
            evaluationService.modifyStatusByNo(no, EvaluationState.Error);
            Asserts.isTrue(false, ERROR_CODE.CONTAINER_START_FAIL);
        }
    }

    @Override
    public String inspect(String id) {
        String url = dockerConfig.getUrl() + "/containers/"+id+"/json";
        ResponseEntity<String> resp = restTemplate.exchange(url, HttpMethod.GET,null,
                new ParameterizedTypeReference<String>(){});
        return resp.getBody();
    }

    @Override
    public void restart(String id) {
        String url = dockerConfig.getUrl() + "/containers/"+id+"/restart";
        HttpEntity<Object> entity = new HttpEntity<>(null);
        ResponseEntity<String> resp = restTemplate.exchange(url, HttpMethod.POST,entity,
                new ParameterizedTypeReference<String>(){});
        if (resp.getStatusCode().value() != 204) {
            Asserts.isTrue(false, ERROR_CODE.CONTAINER_RESTART_FAIL);
        }
    }

    @Override
    public void kill(String id) {
        String url = dockerConfig.getUrl() + "/containers/"+id+"/kill";
        HttpEntity<Object> entity = new HttpEntity<>(null);
        ResponseEntity<String> resp = restTemplate.exchange(url, HttpMethod.POST,entity,
                new ParameterizedTypeReference<String>(){});
        if (resp.getStatusCode().value() != 204) {
            Asserts.isTrue(false, ERROR_CODE.CONTAINER_KILL_FAIL);
        }
    }

    @Override
    public void pause(String id) {
        String url = dockerConfig.getUrl() + "/containers/"+id+"/pause";
        HttpEntity<Object> entity = new HttpEntity<>(null);
        ResponseEntity<String> resp = restTemplate.exchange(url, HttpMethod.POST,entity, new ParameterizedTypeReference<String>(){});
        if (resp.getStatusCode().value() != 204) {
            Asserts.isTrue(false, ERROR_CODE.CONTAINER_PAUSE_FAIL);
        }
    }

    @Override
    public void stop(String no,String id) {
        String url = dockerConfig.getUrl() + "/containers/"+id+"/stop";
        HttpEntity<Object> entity = new HttpEntity<>(null);
        ResponseEntity<String> resp = restTemplate.exchange(url, HttpMethod.POST,entity,
                new ParameterizedTypeReference<String>(){});
        log.info("容器停止返回状态码:{}",resp.getStatusCode().value());
        if (resp.getStatusCode().value() != 204 && resp.getStatusCode().value() != 304) {
            log.info("{}容器停止失败,错误信息:{}",id,resp.getBody());
            Asserts.isTrue(false, ERROR_CODE.CONTAINER_REMOVE_FAIL);
        }
        log.info("{}容器停止成功!",id);
    }


    @Override
    public void remove(String no,String id) {

        //容器状态  null容器不存在   Exited停止  running运行
        String status = getStatus(id);

        log.info("{}容器的状态为:{}",id,status);

        //运行中的容器才能执行stop命令
        if (status == null){
            log.info("{}容器不存在,无需删除",id);
        }else {
            if (status.equals("running")){
                log.info("{}容器执行停止操作",id);
                //停止容器
                stop(no,id);
                log.info("{}容器完成停止操作",id);
            }

            //删除容器
            log.info("{}容器执行删除操作",id);

            String url = dockerConfig.getUrl() +  "/containers/"+id;
            ResponseEntity<String> resp = restTemplate.exchange(url, HttpMethod.DELETE,null,new ParameterizedTypeReference<String>(){});

            log.info("容器删除返回状态码:{}",resp.getStatusCode().value());
            if (resp.getStatusCode().value() != 204) {
                log.info("容器删除失败:{}",resp.getBody());
                Asserts.isTrue(false, ERROR_CODE.CONTAINER_REMOVE_FAIL);
            }

            log.info("{}容器完成删除操作",id);
        }


    }

    @Override
    public String getStatus(String id) {
        String url = dockerConfig.getUrl() + "/containers/"+id+"/json";
        ResponseEntity<JSONObject> resp = restTemplate.exchange(url, HttpMethod.GET,null,
                new ParameterizedTypeReference<JSONObject>(){});
        JSONObject jsonObject = resp.getBody();
        String status = null;
        LinkedHashMap state = (LinkedHashMap) jsonObject.get("State");
        if (state != null){
            status = (String) state.get("Status");
        }
        return status;
    }

猜你喜欢

转载自blog.csdn.net/zhangxue_wei/article/details/108468598