Usare le Docker Engine API con Go

Docker fornisce un'API potente per interagire con il suo engine in modo programmatico. In questo articolo, vedremo come utilizzare le Docker Engine API con Go e il relativo SDK.

Installazione del Client Docker per Go

Per interagire con Docker da Go, รจ necessario installare il pacchetto github.com/docker/docker/client. Possiamo farlo utilizzando il modulo di Go:

go get github.com/docker/docker

Assicuriamoci inoltre di avere Docker in esecuzione sul nostro sistema.

Creare un Client Docker in Go

Per iniziare, dobbiamo creare un'istanza del client Docker:

package main

import (
	"context"
	"fmt"
	"github.com/docker/docker/api/types"
	"github.com/docker/docker/client"
)

func main() {
	cli, err := client.NewClientWithOpts(client.FromEnv)
	if err != nil {
		panic(err)
	}
	defer cli.Close()

	version, err := cli.ServerVersion(context.Background())
	if err != nil {
		panic(err)
	}

	fmt.Println("Docker Server Version:", version.Version)
}

Il codice sopra crea un client Docker utilizzando l'ambiente di sistema e stampa la versione del server Docker.

Elencare i Container in Esecuzione

Possiamo elencare i container in esecuzione con il metodo ContainerList:

func listContainers(cli *client.Client) {
	containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{})
	if err != nil {
		panic(err)
	}

	for _, container := range containers {
		fmt.Println(container.ID[:10], container.Image, container.State)
	}
}

Creare ed Avviare un Container

Per creare un nuovo container, utilizziamo il metodo ContainerCreate e successivamente lo avviamo con ContainerStart:

import "github.com/docker/docker/api/types/container"

func createAndStartContainer(cli *client.Client) {
	resp, err := cli.ContainerCreate(
		context.Background(),
		&container.Config{
			Image: "nginx",
		},
		nil, nil, nil, "my-nginx-container",
	)
	if err != nil {
		panic(err)
	}

	err = cli.ContainerStart(context.Background(), resp.ID, types.ContainerStartOptions{})
	if err != nil {
		panic(err)
	}

	fmt.Println("Container avviato con ID:", resp.ID)
}

Conclusione

Abbiamo visto come utilizzare le Docker Engine API con Go e il relativo SDK per interagire con Docker in modo programmatico. Questo ci permette di gestire container e risorse in modo flessibile e automatizzato.

Torna su