feat(docker): revamped docker response
This commit is contained in:
parent
f00f12ac42
commit
8cf624e39b
@ -0,0 +1,15 @@
|
||||
package fr.la_banquise.backend.rest.response;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class DockerResponse {
|
||||
public String name;
|
||||
public String state;
|
||||
public String image;
|
||||
public List<String> publicPorts;
|
||||
}
|
||||
@ -19,11 +19,14 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.ArrayList;
|
||||
import fr.la_banquise.backend.rest.response.DockerResponse;
|
||||
|
||||
@ApplicationScoped
|
||||
public class DockerService {
|
||||
|
||||
@Inject DockerClient dockerClient;
|
||||
@Inject
|
||||
DockerClient dockerClient;
|
||||
|
||||
public String createAndStartNginx() {
|
||||
ExposedPort tcp80 = ExposedPort.tcp(80);
|
||||
@ -31,16 +34,14 @@ public class DockerService {
|
||||
Ports portBindings = new Ports();
|
||||
portBindings.bind(tcp80, Ports.Binding.bindPort(8081));
|
||||
|
||||
HostConfig hostConfig =
|
||||
HostConfig.newHostConfig().withPortBindings(portBindings);
|
||||
HostConfig hostConfig = HostConfig.newHostConfig().withPortBindings(portBindings);
|
||||
Map<String, String> labels = new HashMap<>();
|
||||
labels.put("test", "banquise");
|
||||
labels.put("environment", "development");
|
||||
labels.put("version", "1.0");
|
||||
labels.put("created-by", "java-docker-api");
|
||||
|
||||
CreateContainerResponse container =
|
||||
dockerClient.createContainerCmd("nginx:latest")
|
||||
CreateContainerResponse container = dockerClient.createContainerCmd("nginx:latest")
|
||||
.withName("my-nginx")
|
||||
.withLabels(labels)
|
||||
.withExposedPorts(tcp80)
|
||||
@ -51,118 +52,120 @@ public class DockerService {
|
||||
return container.getId();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
public String listAllContainers() {
|
||||
StringBuilder json = new StringBuilder();
|
||||
List<Container> containers = dockerClient.listContainersCmd()
|
||||
.withShowAll(true)
|
||||
.exec();
|
||||
|
||||
json.append("[");
|
||||
|
||||
for (int i = 0; i < containers.size(); i++) {
|
||||
Container container = containers.get(i);
|
||||
|
||||
json.append("{");
|
||||
json.append("\"name\":\"").append(container.getNames()[0].substring(1)).append("\",");
|
||||
json.append("\"id\":\"").append(container.getId()).append("\",");
|
||||
json.append("\"image\":\"").append(container.getImage()).append("\",");
|
||||
json.append("\"status\":\"").append(container.getStatus()).append("\",");
|
||||
|
||||
// Ports
|
||||
InspectContainerResponse inspectResponse =
|
||||
dockerClient.inspectContainerCmd(container.getId()).exec();
|
||||
json.append("\"ports\":[");
|
||||
if (container.getPorts() != null && container.getPorts().length > 0) {
|
||||
for (int j = 0; j < .length; j+=2) {
|
||||
ContainerPort port = container.getPorts()[j];
|
||||
json.append("[\"");
|
||||
json.append(port.getPrivatePort()).append("->").append(port.getPublicPort()).append("/"+port.getType()+"\",\"");
|
||||
json.append(port.getIp()).append(",").append((container.getPorts()[j+1]).getIp());
|
||||
if (port.getType() != null) {
|
||||
json.append("/").append(port.getType());
|
||||
}
|
||||
if (port.getPublicPort() != null) {
|
||||
json.append("->").append(port.getPublicPort());
|
||||
}*
|
||||
json.append("\"]");
|
||||
if (j < container.getPorts().length - 2) {
|
||||
json.append(",");
|
||||
}
|
||||
}
|
||||
}
|
||||
json.append("]");
|
||||
|
||||
// Ports
|
||||
String ports = "[]";
|
||||
try {
|
||||
InspectContainerResponse inspectResponse =
|
||||
dockerClient.inspectContainerCmd(container.getId()).exec(); if
|
||||
(inspectResponse.getConfig().getExposedPorts() != null) { ports =
|
||||
inspectResponse.getConfig().getExposedPorts().toString();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// Fallback vers les ports runtime si inspect échoue
|
||||
if (container.getPorts() != null && container.getPorts().length
|
||||
> 0) { ports = java.util.Arrays.toString(container.getPorts());
|
||||
}
|
||||
}
|
||||
json.append("\"ports\":\"").append(ports).append("\"");
|
||||
json.append("}");
|
||||
if (i < containers.size() - 1) {
|
||||
json.append(",");
|
||||
}
|
||||
|
||||
json.append("}");
|
||||
|
||||
if (i < containers.size() - 1) {
|
||||
json.append(",");
|
||||
}
|
||||
}
|
||||
|
||||
json.append("]");
|
||||
return json.toString();
|
||||
}
|
||||
public String listAllContainers() {
|
||||
StringBuilder json = new StringBuilder();
|
||||
List<Container> containers = dockerClient.listContainersCmd()
|
||||
.withShowAll(true)
|
||||
.exec();
|
||||
json.append("[");
|
||||
for (int i = 0; i < containers.size(); i++) {
|
||||
Container container = containers.get(i);
|
||||
// Ports
|
||||
List<String> portsList = new ArrayList<>();
|
||||
try {
|
||||
var inspectResponse =
|
||||
dockerClient.inspectContainerCmd(container.getId()).exec(); if
|
||||
(inspectResponse.getConfig().getExposedPorts() != null) { var exposedPorts =
|
||||
inspectResponse.getConfig().getExposedPorts(); int count = 0; for (var port
|
||||
: exposedPorts) { if (count > 0) portsList.append(",");
|
||||
portsList.append(String.format("\"%s\"",
|
||||
port.toString())); count = 1;
|
||||
}
|
||||
portsList.append("]");
|
||||
ports = portsList.toString();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// Fallback vers les ports runtime si inspect échoue
|
||||
if (container.getPorts() != null && container.getPorts().length
|
||||
> 0) { ports = java.util.Arrays.toString(container.getPorts());
|
||||
}
|
||||
}
|
||||
|
||||
//json.append(containerJson);
|
||||
|
||||
if (i < containers.size() - 1) {
|
||||
json.append(",");
|
||||
}
|
||||
}
|
||||
json.append("]");
|
||||
return json.toString();
|
||||
}*/
|
||||
|
||||
* public String listAllContainers() {
|
||||
* StringBuilder json = new StringBuilder();
|
||||
* List<Container> containers = dockerClient.listContainersCmd()
|
||||
* .withShowAll(true)
|
||||
* .exec();
|
||||
*
|
||||
* json.append("[");
|
||||
*
|
||||
* for (int i = 0; i < containers.size(); i++) {
|
||||
* Container container = containers.get(i);
|
||||
*
|
||||
* json.append("{");
|
||||
* json.append("\"name\":\"").append(container.getNames()[0].substring(1)).
|
||||
* append("\",");
|
||||
* json.append("\"id\":\"").append(container.getId()).append("\",");
|
||||
* json.append("\"image\":\"").append(container.getImage()).append("\",");
|
||||
* json.append("\"status\":\"").append(container.getStatus()).append("\",");
|
||||
*
|
||||
* // Ports
|
||||
* InspectContainerResponse inspectResponse =
|
||||
* dockerClient.inspectContainerCmd(container.getId()).exec();
|
||||
* json.append("\"ports\":[");
|
||||
* if (container.getPorts() != null && container.getPorts().length > 0) {
|
||||
* for (int j = 0; j < .length; j+=2) {
|
||||
* ContainerPort port = container.getPorts()[j];
|
||||
* json.append("[\"");
|
||||
* json.append(port.getPrivatePort()).append("->").append(port.getPublicPort()).
|
||||
* append("/"+port.getType()+"\",\"");
|
||||
* json.append(port.getIp()).append(",").append((container.getPorts()[j+1]).
|
||||
* getIp());
|
||||
* if (port.getType() != null) {
|
||||
* json.append("/").append(port.getType());
|
||||
* }
|
||||
* if (port.getPublicPort() != null) {
|
||||
* json.append("->").append(port.getPublicPort());
|
||||
* }*
|
||||
* json.append("\"]");
|
||||
* if (j < container.getPorts().length - 2) {
|
||||
* json.append(",");
|
||||
* }
|
||||
* }
|
||||
* }
|
||||
* json.append("]");
|
||||
*
|
||||
* // Ports
|
||||
* String ports = "[]";
|
||||
* try {
|
||||
* InspectContainerResponse inspectResponse =
|
||||
* dockerClient.inspectContainerCmd(container.getId()).exec(); if
|
||||
* (inspectResponse.getConfig().getExposedPorts() != null) { ports =
|
||||
* inspectResponse.getConfig().getExposedPorts().toString();
|
||||
* }
|
||||
* } catch (Exception e) {
|
||||
* // Fallback vers les ports runtime si inspect échoue
|
||||
* if (container.getPorts() != null && container.getPorts().length
|
||||
* > 0) { ports = java.util.Arrays.toString(container.getPorts());
|
||||
* }
|
||||
* }
|
||||
* json.append("\"ports\":\"").append(ports).append("\"");
|
||||
* json.append("}");
|
||||
* if (i < containers.size() - 1) {
|
||||
* json.append(",");
|
||||
* }
|
||||
*
|
||||
* json.append("}");
|
||||
*
|
||||
* if (i < containers.size() - 1) {
|
||||
* json.append(",");
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* json.append("]");
|
||||
* return json.toString();
|
||||
* }
|
||||
* public String listAllContainers() {
|
||||
* StringBuilder json = new StringBuilder();
|
||||
* List<Container> containers = dockerClient.listContainersCmd()
|
||||
* .withShowAll(true)
|
||||
* .exec();
|
||||
* json.append("[");
|
||||
* for (int i = 0; i < containers.size(); i++) {
|
||||
* Container container = containers.get(i);
|
||||
* // Ports
|
||||
* List<String> portsList = new ArrayList<>();
|
||||
* try {
|
||||
* var inspectResponse =
|
||||
* dockerClient.inspectContainerCmd(container.getId()).exec(); if
|
||||
* (inspectResponse.getConfig().getExposedPorts() != null) { var exposedPorts =
|
||||
* inspectResponse.getConfig().getExposedPorts(); int count = 0; for (var port
|
||||
* : exposedPorts) { if (count > 0) portsList.append(",");
|
||||
* portsList.append(String.format("\"%s\"",
|
||||
* port.toString())); count = 1;
|
||||
* }
|
||||
* portsList.append("]");
|
||||
* ports = portsList.toString();
|
||||
* }
|
||||
* } catch (Exception e) {
|
||||
* // Fallback vers les ports runtime si inspect échoue
|
||||
* if (container.getPorts() != null && container.getPorts().length
|
||||
* > 0) { ports = java.util.Arrays.toString(container.getPorts());
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* //json.append(containerJson);
|
||||
*
|
||||
* if (i < containers.size() - 1) {
|
||||
* json.append(",");
|
||||
* }
|
||||
* }
|
||||
* json.append("]");
|
||||
* return json.toString();
|
||||
* }
|
||||
*/
|
||||
|
||||
////////////////////
|
||||
public String createContainer(String name, int port) {
|
||||
@ -171,8 +174,7 @@ public class DockerService {
|
||||
Ports portBindings = new Ports();
|
||||
portBindings.bind(tcpSsh, Ports.Binding.bindPort(port));
|
||||
|
||||
HostConfig hostConfig =
|
||||
HostConfig.newHostConfig().withPortBindings(portBindings);
|
||||
HostConfig hostConfig = HostConfig.newHostConfig().withPortBindings(portBindings);
|
||||
Map<String, String> labels = new HashMap<>();
|
||||
labels.put("test", "banquise");
|
||||
labels.put("environment", "development");
|
||||
@ -180,32 +182,30 @@ public class DockerService {
|
||||
labels.put("created-by", "java-docker-api");
|
||||
|
||||
dockerClient.buildImageCmd()
|
||||
.withDockerfile(new File("./dockerfile/Dockerfile"))
|
||||
.withBaseDirectory(new File("./dockerfile"))
|
||||
.withTags(Set.of("ji-python:latest"))
|
||||
.exec(new BuildImageResultCallback())
|
||||
.awaitImageId();
|
||||
.withDockerfile(new File("./dockerfile/Dockerfile"))
|
||||
.withBaseDirectory(new File("./dockerfile"))
|
||||
.withTags(Set.of("ji-python:latest"))
|
||||
.exec(new BuildImageResultCallback())
|
||||
.awaitImageId();
|
||||
|
||||
CreateContainerResponse container =
|
||||
dockerClient.createContainerCmd("ji-python:latest")
|
||||
CreateContainerResponse container = dockerClient.createContainerCmd("ji-python:latest")
|
||||
.withName(name)
|
||||
.withLabels(labels)
|
||||
.withExposedPorts(tcpSsh)
|
||||
.withHostConfig(hostConfig)
|
||||
.withEnv(
|
||||
"SUDO_ACCESS=false",
|
||||
"PASSWORD_ACCESS=true",
|
||||
"USER_NAME=test", // TODO: CHANGE THIS
|
||||
"USER_PASSWORD=test" // AND this also oc
|
||||
)
|
||||
"SUDO_ACCESS=false",
|
||||
"PASSWORD_ACCESS=true",
|
||||
"USER_NAME=test", // TODO: CHANGE THIS
|
||||
"USER_PASSWORD=test" // AND this also oc
|
||||
)
|
||||
.exec();
|
||||
|
||||
return container.getId();
|
||||
}
|
||||
|
||||
public InspectContainerResponse.ContainerState getStatusContainer(String name) {
|
||||
InspectContainerResponse container =
|
||||
dockerClient.inspectContainerCmd(name).exec();
|
||||
InspectContainerResponse container = dockerClient.inspectContainerCmd(name).exec();
|
||||
return container.getState();
|
||||
}
|
||||
|
||||
@ -235,11 +235,21 @@ public class DockerService {
|
||||
dockerClient.stopContainerCmd(containerId).exec();
|
||||
}
|
||||
|
||||
public List<Container> listAllContainers() {
|
||||
return dockerClient.listContainersCmd()
|
||||
.withShowAll(true)
|
||||
.exec();
|
||||
public List<DockerResponse> listAllContainers() {
|
||||
List<Container> containers = dockerClient.listContainersCmd()
|
||||
.withShowAll(true)
|
||||
.exec();
|
||||
return containers.stream().map(this::toDockerResponse).toList();
|
||||
}
|
||||
|
||||
private DockerResponse toDockerResponse(Container container) {
|
||||
List<String> portsList = new ArrayList<>();
|
||||
for (var port : container.getPorts()) {
|
||||
portsList.add(String.format("%s:%s", port.getPrivatePort(), port.getPublicPort()));
|
||||
}
|
||||
|
||||
return new DockerResponse(container.getNames()[0].substring(1), container.getStatus(), container.getImage(),
|
||||
portsList);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user