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:- Descarga el paquete directamente.
- Extráelo y cámbiate al directorio extraído.
- Ejecuta
python setup.py install.
Para obtener más información, consulta la referencia del SDK de Python para Docker Engine.
NoteUsuarios de Docker Desktop para Linux
Docker Desktop para Linux utiliza un socket por usuario en lugar del
/var/run/docker.sockdel sistema. Para usar los SDKs de Docker con Docker Desktop para Linux, establece la variable de entornoDOCKER_HOST:export DOCKER_HOST=unix://$HOME/.docker/desktop/docker.sockPara 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.
ImportantLos 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.
| Lenguaje | Biblioteca |
|---|---|
| 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 |