Uso de imágenes Docker

Cuando se ejecuta un contenedor, si la imagen utilizada no existe localmente, Docker la descargará automáticamente desde el repositorio de imágenes de Docker; por defecto, se descarga desde la fuente pública de imágenes Docker Hub.

A continuación vamos a aprender:

  • 1. Gestionar y usar imágenes de Docker en el host local
  • 2. Crear imágenes

Listar imágenes

Podemos usardocker imagespara listar las imágenes en el host local.

ejemplo@ejemplo:~$ docker images           
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB
nginx               latest              6f8d099c3adc        12 days ago         182.7 MB
mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB
httpd               latest              02ef73cf1bc0        3 weeks ago         194.4 MB
ubuntu              15.10               4e3b13c8a266        4 weeks ago         136.3 MB
hello-world         latest              690ed74de00f        6 months ago        960 B
training/webapp     latest              6fae60ef3446        11 months ago       348.8 MB

Descripción de las opciones:

  • REPOSITORY:Indica la fuente del repositorio de la imagen

  • TAG:Etiqueta de la imagen

  • IMAGE ID:ID de la imagen

  • CREATED:Fecha de creación de la imagen

  • SIZE:Tamaño de la imagen

La misma fuente de repositorio puede tener múltiples TAG, que representan diferentes versiones de la fuente del repositorio. Por ejemplo, en la fuente del repositorio ubuntu hay varias versiones como 15.10, 14.04, etc. Usamos REPOSITORY:TAG para definir diferentes imágenes.

Por lo tanto, si queremos usar la imagen del sistema ubuntu versión 15.10 para ejecutar un contenedor, el comando es el siguiente:

ejemplo@ejemplo:~$ docker run -t -i ubuntu:15.10 /bin/bash 
root@d77ccb2e5cca:/#

Descripción de parámetros:

  • -i: Operación interactiva.
  • -t: Terminal.
  • ubuntu:15.10: Esto indica que se usa la imagen ubuntu 15.10 como base para iniciar el contenedor.
  • /bin/bash: Lo que va después del nombre de la imagen es el comando; aquí queremos un shell interactivo, por lo que usamos /bin/bash.

Si queremos usar la imagen del sistema ubuntu versión 14.04 para ejecutar un contenedor, el comando es el siguiente:

ejemplo@ejemplo:~$ docker run -t -i ubuntu:14.04 /bin/bash 
root@39e968165990:/# 

Si no especificas una etiqueta de versión de imagen, por ejemplo si solo usas ubuntu, Docker usará por defecto la imagen ubuntu:latest.


Obtener una nueva imagen

Cuando usamos una imagen que no existe en el host local, Docker la descargará automáticamente. Si queremos descargar la imagen de antemano, podemos usar el comando docker pull para descargarla.

Cejemplo@ejemplo:~$ docker pull ubuntu:13.10
13.10: Pulling from library/ubuntu
6599cadaf950: Pull complete 
23eda618d451: Pull complete 
f0be3084efe9: Pull complete 
52de432f084b: Pull complete 
a3ed95caeb02: Pull complete 
Digest: sha256:15b79a6654811c8d992ebacdfbd5152fcf3d165e374e264076aa435214a947a3
Status: Downloaded newer image for ubuntu:13.10

Una vez completada la descarga, podemos usar directamente esta imagen para ejecutar un contenedor.


Buscar imágenes

Podemos buscar imágenes en el sitio web Docker Hub. La URL de Docker Hub es:https://hub.docker.com/

También podemos usar el comando docker search para buscar imágenes. Por ejemplo, si necesitamos una imagen de httpd para nuestro servicio web, podemos usar el comando docker search para buscar httpd y encontrar la imagen adecuada.

ejemplo@ejemplo:~$  docker search httpd

Haz clic en la imagen para verla en grande:

NAME: Nombre de la fuente del repositorio de imágenes

DESCRIPTION: Descripción de la imagen

OFFICIAL: Si está publicado oficialmente por Docker

stars: Similar a las estrellas en GitHub, indica "me gusta" o favorito.

AUTOMATED: Construcción automática.


Descargar imágenes

Decidimos usar la imagen de la versión oficial de httpd de la figura anterior. Usamos el comando docker pull para descargar la imagen.

ejemplo@ejemplo:~$ docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
8b87079b7a06: Pulling fs layer 
a3ed95caeb02: Download complete 
0d62ec9c6a76: Download complete 
a329d50397b9: Download complete 
ea7c1f032b5c: Waiting 
be44112b72c7: Waiting

Una vez completada la descarga, ya podemos usar esta imagen.

ejemplo@ejemplo:~$ docker run httpd

Eliminar imágenes

Para eliminar imágenes se usadocker rmiel comando, por ejemplo, para eliminar la imagen hello-world:

$ docker rmi hello-world


Crear imágenes

Cuando la imagen descargada del repositorio de imágenes de Docker no satisface nuestras necesidades, podemos modificar la imagen de las siguientes dos maneras:

  • 1. Actualizar la imagen desde un contenedor ya creado y confirmar (commit) esta imagen
  • 2. Usar las instrucciones de Dockerfile para crear una nueva imagen

Actualizar imágenes

Antes de actualizar la imagen, necesitamos usar la imagen para crear un contenedor.

ejemplo@ejemplo:~$ docker run -t -i ubuntu:15.10 /bin/bash

Después de entrar al contenedor, actualiza el sistema:

apt-get update
apt-get upgrade -y

Después de completar la operación, introduce el comando exit para salir de este contenedor.

exit

En este momento, el contenedor con ID e218edb10161 es el contenedor modificado según nuestras necesidades. Podemos usar el comando docker commit para confirmar (commit) una copia del contenedor.

ejemplo@ejemplo:~$ docker commit -m="has update" -a="ejemplo" e218edb10161 ejemplo/ubuntu:v2
sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8

Descripción de cada parámetro:

  • -m:Descripción de la confirmación (commit)

  • -a:Especifica el autor de la imagen

  • e218edb10161:ID del contenedor

  • ejemplo/ubuntu:v2:Especifica el nombre de la imagen de destino que se va a crear

Podemos usardocker imagesel comando para ver nuestra nueva imagenejemplo/ubuntu:v2:

ejemplo@ejemplo:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ejemplo/ubuntu       v2                  70bf1840fd7c        15 seconds ago      158.5 MB
ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB
nginx               latest              6f8d099c3adc        12 days ago         182.7 MB
mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB
httpd               latest              02ef73cf1bc0        3 weeks ago         194.4 MB
ubuntu              15.10               4e3b13c8a266        4 weeks ago         136.3 MB
hello-world         latest              690ed74de00f        6 months ago        960 B
training/webapp     latest              6fae60ef3446        12 months ago       348.8 MB

Usar nuestra nueva imagenejemplo/ubuntupara iniciar un contenedor

ejemplo@ejemplo:~$ docker run -t -i ejemplo/ubuntu:v2 /bin/bash                            
root@1a9fbdeb5da3:/#

Construir imágenes

Usamos el comandodocker build, para crear una nueva imagen desde cero. Para ello, necesitamos crear un archivo Dockerfile que contenga un conjunto de instrucciones para indicar a Docker cómo construir nuestra imagen.

ejemplo@ejemplo:~$ cat Dockerfile 
FROM    centos:6.7
MAINTAINER      Fisher "[email protected]"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd ejemplo
RUN     /bin/echo 'ejemplo:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

Cada instrucción crea una nueva capa en la imagen, y el prefijo de cada instrucción debe estar en mayúsculas.

La primera instrucción FROM especifica qué fuente de imagen se utiliza.

La instrucción RUN le dice a Docker que ejecute comandos dentro de la imagen, qué se instala, etc.

Luego, usamos el archivo Dockerfile y el comando docker build para construir una imagen.

ejemplo@ejemplo:~$ docker build -t ejemplo/centos:6.7 .
Sending build context to Docker daemon 17.92 kB
Step 1 : FROM centos:6.7
 ---> d95b5ca17cc3
Step 2 : MAINTAINER Fisher "[email protected]"
 ---> Using cache
 ---> 0c92299c6f03
Step 3 : RUN /bin/echo 'root:123456' |chpasswd
 ---> Using cache
 ---> 0397ce2fbd0a
Step 4 : RUN useradd ejemplo
......

Descripción de parámetros:

  • -t: Especifica el nombre de la imagen de destino que se va a crear

  • .: El directorio donde se encuentra el archivo Dockerfile; se puede especificar la ruta absoluta del Dockerfile

Usa docker images para ver que la imagen creada ya existe en la lista, con ID de imagen 860c279d2fec.

ejemplo@ejemplo:~$ docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
ejemplo/centos       6.7                 860c279d2fec        About a minute ago   190.6 MB
ejemplo/ubuntu       v2                  70bf1840fd7c        17 hours ago         158.5 MB
ubuntu              14.04               90d5884b1ee0        6 days ago           188 MB
php                 5.6                 f40e9e0f10c8        10 days ago          444.8 MB
nginx               latest              6f8d099c3adc        12 days ago          182.7 MB
mysql               5.6                 f2e8d6c772c0        3 weeks ago          324.6 MB
httpd               latest              02ef73cf1bc0        3 weeks ago          194.4 MB
ubuntu              15.10               4e3b13c8a266        5 weeks ago          136.3 MB
hello-world         latest              690ed74de00f        6 months ago         960 B
centos              6.7                 d95b5ca17cc3        6 months ago         190.6 MB
training/webapp     latest              6fae60ef3446        12 months ago        348.8 MB

Podemos usar la nueva imagen para crear un contenedor

ejemplo@ejemplo:~$ docker run -t -i ejemplo/centos:6.7  /bin/bash
[root@41c28d18b5fb /]# id ejemplo
uid=500(ejemplo) gid=500(ejemplo) groups=500(ejemplo)

Como se ve arriba, la nueva imagen ya incluye el usuario ejemplo que creamos.

Establecer etiquetas de imagen

Podemos usar el comando docker tag para agregar una nueva etiqueta a la imagen.

ejemplo@ejemplo:~$ docker tag 860c279d2fec ejemplo/centos:dev

docker tag ID de la imagen, aquí es 860c279d2fec, nombre de usuario, nombre del repositorio y nuevo nombre de etiqueta (tag).

Usando el comando docker images se puede ver que la imagen con ID 860c279d2fec tiene una etiqueta más.

ejemplo@ejemplo:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ejemplo/centos       6.7                 860c279d2fec        5 hours ago         190.6 MB
ejemplo/centos       dev                 860c279d2fec        5 hours ago         190.6 MB
ejemplo/ubuntu       v2                  70bf1840fd7c        22 hours ago        158.5 MB
ubuntu              14.04               90d5884b1ee0        6 days ago          188 MB
php                 5.6                 f40e9e0f10c8        10 days ago         444.8 MB
nginx               latest              6f8d099c3adc        13 days ago         182.7 MB
mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB
httpd               latest              02ef73cf1bc0        3 weeks ago         194.4 MB
ubuntu              15.10               4e3b13c8a266        5 weeks ago         136.3 MB
hello-world         latest              690ed74de00f        6 months ago        960 B
centos              6.7                 d95b5ca17cc3        6 months ago        190.6 MB
training/webapp     latest              6fae60ef3446        12 months ago       348.8 MB
Otras extensiones