Usare le Docker Engine API con Java

In questo articolo, vedremo come utilizzare Java con l'SDK per interfacciarsi con Docker Engine.

Java di Gabriele Romanato

Le Docker Engine API consentono di interagire con Docker a livello programmatico, permettendo di gestire container, immagini e volumi. In questo articolo, vedremo come utilizzare Java con l'SDK per interfacciarsi con Docker Engine.

Prerequisiti

  • Docker installato e in esecuzione
  • Java Development Kit (JDK) 8 o superiore
  • Maven o Gradle per la gestione delle dipendenze

Configurazione del progetto

Per usare le Docker Engine API in Java, possiamo utilizzare la libreria docker-java. Aggiungiamo la dipendenza in pom.xml se usiamo Maven:

<dependency>
    <groupId>com.github.docker-java</groupId>
    <artifactId>docker-java</artifactId>
    <version>3.2.13</version>
</dependency>

Se usiamo Gradle, aggiungiamo:

dependencies {
    implementation 'com.github.docker-java:docker-java:3.2.13'
}

Connessione a Docker

Ora possiamo scrivere un semplice programma Java per connettersi a Docker e ottenere informazioni sul demone in esecuzione.

import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.core.DockerClientConfig;
import com.github.dockerjava.core.DockerClientImpl;
import com.github.dockerjava.core.command.PullImageResultCallback;
import com.github.dockerjava.okhttp.OkDockerHttpClient;

public class DockerJavaExample {
    public static void main(String[] args) {
        DockerClientConfig config = DockerClientConfig.createDefaultConfigBuilder().build();

        try (DockerClient dockerClient = DockerClientImpl.getInstance(config,
                new OkDockerHttpClient.Builder().dockerHost(config.getDockerHost()).build())) {
            
            System.out.println("Versione Docker: " + dockerClient.versionCmd().exec().getVersion());
        }
    }
}

Gestione dei container

Creiamo ora un container basato su un'immagine esistente:

import com.github.dockerjava.api.command.CreateContainerResponse;

CreateContainerResponse container = dockerClient.createContainerCmd("nginx")
        .withName("my-nginx-container")
        .exec();

dockerClient.startContainerCmd(container.getId()).exec();
System.out.println("Container avviato con ID: " + container.getId());

Elenco dei container

Possiamo recuperare la lista dei container attivi con il seguente codice:

dockerClient.listContainersCmd().exec().forEach(c -> 
    System.out.println("Container ID: " + c.getId() + ", Nome: " + c.getNames()[0])
);

Conclusione

Abbiamo visto come usare le Docker Engine API con Java e l'SDK docker-java. Questa libreria consente di interagire facilmente con Docker per creare, gestire ed eseguire container in modo programmatico.