diff --git a/pom.xml b/pom.xml
index 1492269..9fdd9e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -79,6 +79,11 @@
rest-assured
test
+
+ io.quarkiverse.docker
+ quarkus-docker-client
+ 0.0.5
+
org.projectlombok
lombok
diff --git a/src/main/java/fr/la_banquise/backend/rest/ContainerResource.java b/src/main/java/fr/la_banquise/backend/rest/ContainerResource.java
new file mode 100644
index 0000000..a16e287
--- /dev/null
+++ b/src/main/java/fr/la_banquise/backend/rest/ContainerResource.java
@@ -0,0 +1,40 @@
+package fr.la_banquise.backend.rest;
+
+import fr.la_banquise.backend.services.DockerService;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+
+import java.util.Map;
+
+@Path("/containers")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class ContainerResource {
+
+ @Inject
+ DockerService dockerService;
+
+ @POST
+ @Path("/nginx")
+ public Response launchNginx() {
+ try {
+ String id = dockerService.createAndStartNginx();
+ return Response.ok(Map.of("containerId", id, "status", "running")).build();
+ } catch (Exception e) {
+ return Response.status(500).entity(Map.of("error", e.getMessage())).build();
+ }
+ }
+
+ @DELETE
+ @Path("/{id}")
+ public Response remove(@PathParam("id") String id) {
+ try {
+ dockerService.stopAndRemove(id);
+ return Response.ok(Map.of("containerId", id, "status", "removed")).build();
+ } catch (Exception e) {
+ return Response.status(500).entity(Map.of("error", e.getMessage())).build();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/fr/la_banquise/backend/services/DockerService.java b/src/main/java/fr/la_banquise/backend/services/DockerService.java
new file mode 100644
index 0000000..add12d4
--- /dev/null
+++ b/src/main/java/fr/la_banquise/backend/services/DockerService.java
@@ -0,0 +1,41 @@
+package fr.la_banquise.backend.services;
+
+import com.github.dockerjava.api.DockerClient;
+import com.github.dockerjava.api.command.CreateContainerResponse;
+import com.github.dockerjava.api.model.ExposedPort;
+import com.github.dockerjava.api.model.HostConfig;
+import com.github.dockerjava.api.model.PortBinding;
+import com.github.dockerjava.api.model.Ports;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+@ApplicationScoped
+public class DockerService {
+
+ @Inject
+ DockerClient dockerClient;
+
+ public String createAndStartNginx() {
+ ExposedPort tcp80 = ExposedPort.tcp(80);
+
+ Ports portBindings = new Ports();
+ portBindings.bind(tcp80, Ports.Binding.bindPort(8081));
+
+ HostConfig hostConfig = HostConfig.newHostConfig()
+ .withPortBindings(portBindings);
+
+ CreateContainerResponse container = dockerClient.createContainerCmd("nginx:latest")
+ .withName("my-nginx")
+ .withExposedPorts(tcp80)
+ .withHostConfig(hostConfig)
+ .exec();
+
+ dockerClient.startContainerCmd(container.getId()).exec();
+ return container.getId();
+ }
+
+ public void stopAndRemove(String containerId) {
+ dockerClient.stopContainerCmd(containerId).exec();
+ dockerClient.removeContainerCmd(containerId).exec();
+ }
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 6858101..f562095 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -36,3 +36,5 @@ quarkus.hibernate-orm.database.generation=update
quarkus.quinoa.dev-server.port=5173
quarkus.quinoa.enable-spa-routing=true
+
+quarkus.docker.docker-host=unix:///var/run/docker.sock