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
:- Téléchargez le paquet directement.
- Extrayez-le et changez vers le répertoire extrait.
- 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.
ImportantLes 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.
Langage | Bibliothèque |
---|---|
C | libdocker |
C# | Docker.DotNet |
C++ | lasote/docker_client |
Clojure | clj-docker-client |
Clojure | contajners |
Dart | bwu_docker |
Erlang | erldocker |
Gradle | gradle-docker-plugin |
Groovy | docker-client |
Haskell | docker-hs |
Java | docker-client |
Java | docker-java |
Java | docker-java-api |
Java | jocker |
NodeJS | dockerode |
NodeJS | harbor-master |
NodeJS | the-moby-effect |
Perl | Eixo::Docker |
PHP | Docker-PHP |
Ruby | docker-api |
Rust | bollard |
Rust | docker-rust |
Rust | shiplift |
Scala | tugboat |
Scala | reactive-docker |
Swift | docker-client-swift |