Construir Imágenes Utilizando Apis

En la receta anterior, exploramos algunas acciones sobre imágenes de Docker utilizando apis. En esta receta, construiremos una imagen de Docker utilizando la api /build. A continuación, se muestra el fragmento de la api /build desde Swagger Editor:

Diagrama

Cómo hacerlo…

  1. Comience clonando el repositorio https://github.com/docker-cookbook/apache2, de la siguiente manera:
$ git clone https://github.com/docker-cookbook/apache2

Este repositorio contiene el Dockerfile para empaquetar un servicio apache2; a continuación, se muestra el contenido del Dockerfile:

Diagrama

  1. Creemos el contexto de construcción empaquetando el contenido del repositorio apache2 clonado como un archivo tar, como se demuestra a continuación:
$ cd apache2
$ tar cvf /tmp/apache2.tar *
  1. Continúe construyendo la imagen de Docker utilizando la api /build:
$ curl -X POST \
           -H "Content-Type:application/tar" \
           --data-binary '@/tmp/apache2.tar' \
           --unix-socket /var/run/docker.sock \
           http:/build

Mientras la construcción esté en progreso, recibirá los registros de construcción como una serie de mensajes JSON. Una vez que la construcción se complete con éxito, recibirá un mensaje JSON como el siguiente:

{"stream":"Successfully built 3c6f5044386d\n"}

En el mensaje JSON anterior, 3c6f5044386d es el ID de la imagen que acabamos de construir utilizando la api /build.

Cómo funciona…

En esta receta, empaquetamos el contexto de construcción como un archivo tar y lo enviamos al motor de Docker como parte de la llamada a la api /build. El motor de Docker utiliza el contexto de construcción y el Dockerfile en el contexto de construcción para construir la imagen de Docker.

Hay más…

  1. En esta receta, no especificamos ningún nombre de repositorio o etiqueta, y por lo tanto la imagen se crea sin ningún nombre de repositorio o etiqueta, como se muestra a continuación:
$ curl -s --unix-socket /var/run/docker.sock \
                 http:/images/json | jq ".[0].RepoTags"
[
"<none>:<none>"
]

Por supuesto, ahora puede etiquetar la imagen con el nombre de repositorio y etiqueta adecuados utilizando la api /images/{name}/tag. A continuación, se muestra el fragmento de la documentación de ayuda del editor Swagger:

Diagrama

Alternativamente, puede empaquetar la imagen con el nombre de repositorio durante la construcción utilizando el parámetro t, como se demuestra a continuación:

$ curl -X POST \
           -H "Content-Type:application/tar" \
           --data-binary '@/tmp/apache2.tar' \
           --unix-socket /var/run/docker.sock \
           http:/build?t=apache2:usingapi

El nombre de la etiqueta es opcional y si no se especifica, el motor de construcción de Docker asumirá la etiqueta latest.

  1. También puede crear una imagen a partir de un contenedor utilizando la siguiente api:

Diagrama

A continuación, se muestra un ejemplo de confirmación de una imagen a partir de un ID de contenedor 4aaec8980c43:

Diagrama

Ver también

Cada punto final de la api puede tener diferentes entradas para controlar las operaciones. Para obtener más detalles, visite la documentación en el sitio web de Docker en https://docs.docker.com/engine/api/latest/.