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