⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Développer avec les SDK Docker Engine

Docker fournit une API pour interagir avec le démon Docker (appelé l'API Docker Engine), ainsi que des SDK pour Go et Python. Les SDK vous permettent de créer et d'adapter efficacement des applications et solutions Docker. Si Go ou Python ne conviennent pas, vous pouvez utiliser l'API Docker Engine directement.

L'API Docker Engine est une API RESTful accessible par un client HTTP tel que wget ou curl, ou la bibliothèque HTTP qui fait partie de la plupart des langages de programmation modernes.

Installer les SDK

Utilisez les commandes suivantes pour installer le SDK Go ou Python. Les deux SDK peuvent être installés et coexister ensemble.

SDK Go

$ go get github.com/docker/docker/client

Le client nécessite une version récente de Go. Exécutez go version et assurez-vous que vous utilisez une version actuellement prise en charge de Go.

Pour plus d'informations, voir Référence du SDK Docker Engine Go.

SDK Python

  • Recommandé : Exécutez pip install docker.

  • Si vous ne pouvez pas utiliser pip :

    1. Téléchargez le paquet directement.
    2. Extrayez-le et changez vers le répertoire extrait.
    3. Exécutez python setup.py install.

Pour plus d'informations, voir Référence du SDK Docker Engine Python.

Voir la référence de l'API

Vous pouvez voir la référence de la dernière version de l'API ou choisir une version spécifique.

API et SDK versionnés

La version de l'API Docker Engine que vous devez utiliser dépend de la version de votre démon Docker et de votre client Docker. Voir la section API et SDK versionnés dans la documentation de l'API pour plus de détails.

Démarrage rapide SDK et API

Utilisez les directives suivantes pour choisir la version du SDK ou de l'API à utiliser dans votre code :

  • Si vous commencez un nouveau projet, utilisez la dernière version, mais utilisez la négociation de version d'API ou spécifiez la version que vous utilisez. Cela aide à prévenir les surprises.
  • Si vous avez besoin d'une nouvelle fonctionnalité, mettez à jour votre code pour utiliser au moins la version minimale qui prend en charge la fonctionnalité, et préférez la dernière version que vous pouvez utiliser.
  • Sinon, continuez à utiliser la version que votre code utilise déjà.

À titre d'exemple, la commande docker run peut être implémentée en utilisant l'API Docker directement, ou en utilisant le SDK Python ou Go.

package main

import (
	"context"
	"io"
	"os"

	"github.com/docker/docker/api/types/container"
        "github.com/docker/docker/api/types/image"
	"github.com/docker/docker/client"
	"github.com/docker/docker/pkg/stdcopy"
)

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

    reader, err := cli.ImagePull(ctx, "docker.io/library/alpine", image.PullOptions{})
    if err != nil {
        panic(err)
    }
    io.Copy(os.Stdout, reader)

    resp, err := cli.ContainerCreate(ctx, &container.Config{
        Image: "alpine",
        Cmd:   []string{"echo", "hello world"},
    }, nil, nil, nil, "")
    if err != nil {
        panic(err)
    }

    if err := cli.ContainerStart(ctx, resp.ID, container.StartOptions{}); err != nil {
        panic(err)
    }

    statusCh, errCh := cli.ContainerWait(ctx, resp.ID, container.WaitConditionNotRunning)
    select {
    case err := <-errCh:
        if err != nil {
            panic(err)
        }
    case <-statusCh:
    }

    out, err := cli.ContainerLogs(ctx, resp.ID, container.LogsOptions{ShowStdout: true})
    if err != nil {
        panic(err)
    }

    stdcopy.StdCopy(os.Stdout, os.Stderr, out)
}
import docker
client = docker.from_env()
print(client.containers.run("alpine", ["echo", "hello", "world"]))
$ curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" \
  -d '{"Image": "alpine", "Cmd": ["echo", "hello world"]}' \
  -X POST http://localhost/v1.50/containers/create
{"Id":"1c6594faf5","Warnings":null}

$ curl --unix-socket /var/run/docker.sock -X POST http://localhost/v1.50/containers/1c6594faf5/start

$ curl --unix-socket /var/run/docker.sock -X POST http://localhost/v1.50/containers/1c6594faf5/wait
{"StatusCode":0}

$ curl --unix-socket /var/run/docker.sock "http://localhost/v1.50/containers/1c6594faf5/logs?stdout=1"
hello world

Lorsque vous utilisez cURL pour vous connecter via un socket Unix, le nom d'hôte n'est pas important. Les exemples précédents utilisent localhost, mais n'importe quel nom d'hôte fonctionnerait.

Important

Les exemples précédents supposent que vous utilisez cURL 7.50.0 ou une version ultérieure. Les anciennes versions de cURL utilisaient une notation d'URL non standard lors de l'utilisation d'une connexion par socket.

Si vous utilisez une ancienne version de cURL, utilisez http:/<version API>/ à la place, par exemple : http:/v1.50/containers/1c6594faf5/start.

Pour plus d'exemples, jetez un œil aux exemples de SDK.

Bibliothèques non officielles

Il existe un certain nombre de bibliothèques soutenues par la communauté disponibles pour d'autres langages. Elles n'ont pas été testées par Docker, donc si vous rencontrez des problèmes, signalez-les aux mainteneurs de la bibliothèque.