Compartir comentarios
Las respuestas se generan en base a la documentación.

Desarrollar con los SDKs de Docker Engine

Docker proporciona una API para interactuar con el demonio de Docker (llamada API de Docker Engine), así como SDKs para Go y Python. Los SDKs te permiten compilar y escalar de manera eficiente aplicaciones y soluciones de Docker. Si Go o Python no se adaptan a tus necesidades, puedes usar la API de Docker Engine directamente.

La API de Docker Engine es una API RESTful a la que se accede mediante un cliente HTTP como wget o curl, o la biblioteca HTTP que forma parte de la mayoría de los lenguajes de programación modernos.

Instalar los SDKs

Usa los siguientes comandos para instalar el SDK de Go o Python. Ambos SDKs se pueden instalar y coexistir juntos.

SDK de Go

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

El cliente requiere una versión reciente de Go. Ejecuta go version y asegúrate de que estás ejecutando una versión de Go actualmente compatible.

Para obtener más información, consulta la referencia del cliente de Go.

SDK de Python

  • Recomendado: Ejecuta pip install docker.

  • Si no puedes usar pip:

    1. Descarga el paquete directamente.
    2. Extráelo y cámbiate al directorio extraído.
    3. Ejecuta python setup.py install.

Para obtener más información, consulta la referencia del SDK de Python para Docker Engine.

Note

Usuarios de Docker Desktop para Linux

Docker Desktop para Linux utiliza un socket por usuario en lugar del /var/run/docker.sock del sistema. Para usar los SDKs de Docker con Docker Desktop para Linux, establece la variable de entorno DOCKER_HOST:

export DOCKER_HOST=unix://$HOME/.docker/desktop/docker.sock

Para obtener más detalles, consulta las preguntas frecuentes de Linux.

Ver la referencia de la API

Puedes ver la referencia de la última versión de la API o elegir una versión específica.

API y SDK con versiones

La versión de la API de Docker Engine que debes usar depende de la versión de tu demonio de Docker y de tu cliente de Docker. Consulta la sección de API y SDK con versiones en la documentación de la API para obtener más detalles.

Inicio rápido de SDK y API

Usa las siguientes pautas para elegir la versión del SDK o de la API que usarás en tu código:

  • Si estás comenzando un proyecto nuevo, usa la última versión, pero utiliza la negociación de versión de la API o especifica la versión que estás usando. Esto ayuda a evitar sorpresas.
  • Si necesitas una nueva característica, actualiza tu código para usar al menos la versión mínima que admita dicha característica, y prefiere la última versión que puedas usar.
  • De lo contrario, continúa usando la versión que ya esté utilizando tu código.

Como ejemplo, el comando docker run se puede implementar utilizando la API de Docker directamente, o mediante el SDK de Python o Go.

package main

import (
	"context"
	"io"
	"os"

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

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

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

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

	if _, err := apiClient.ContainerStart(ctx, resp.ID, client.ContainerStartOptions{}); err != nil {
		panic(err)
	}

	wait := apiClient.ContainerWait(ctx, resp.ID, client.ContainerWaitOptions{})
	select {
	case err := <-wait.Error:
		if err != nil {
			panic(err)
		}
	case <-wait.Result:
	}

	out, err := apiClient.ContainerLogs(ctx, resp.ID, client.ContainerLogsOptions{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.54/containers/create
{"Id":"1c6594faf5","Warnings":null}

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

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

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

Cuando se utiliza cURL para conectarse a través de un socket Unix, el nombre de host no es importante. Los ejemplos anteriores usan localhost, pero cualquier nombre de host funcionaría.

Important

Los ejemplos anteriores asumen que estás usando cURL 7.50.0 o superior. Las versiones anteriores de cURL utilizaban una notación de URL no estándar al realizar conexiones a través de un socket.

Si estás usando una versión anterior de cURL, utiliza http:/<versión de la API>/ en su lugar, por ejemplo: http:/v1.54/containers/1c6594faf5/start.

Para ver más ejemplos, echa un vistazo a los ejemplos de SDK.

Bibliotecas no oficiales

Existe una serie de bibliotecas compatibles con la comunidad disponibles para otros lenguajes. No han sido probadas por Docker, por lo que si experimentas algún problema, comunícalo a los mantenedores de la biblioteca correspondientes.