Saltar a contenido

Imágenes

Las imagenes Docker son plantillas a partir de las cuáles pueden crearse contenedores. Las imágenes están formadas por diferentes "capas", incluyendo una aplicación, los binarios y las librerias necesarias.

Gestión de imágenes

Docker posee un repositorio público de imágenes "prefabricadas", creadas por empresas o particulares. Las mimas pueden encontrarse en Docker Hub.

Las instrucciones que siguen aplican a la gestión de imágenes Docker a través de la terminal de comandos.

Buscar imágenes

Podemos buscar imágenes usando el siguiente comando:

docker search <Términos de Búsqueda>

Por ejemplo:

docker search python
La acción nos devolverá las imágenes disponibles que coinciden con el término de búsqueda "python"

Descargar una imagen

Podemos descargar fácilmente una imagen desde el repositorio a nuestro equipo:

docker pull <imageName>[:<tag>]

Por ejemplo:

dockker pull python:latest
El comando de ejemplo descargará la última imagen de python diponible.

Otro ejemplo:

dockker pull debian:9.13

En este caso, se descargará a nuestro equipo la imagen de Debian, versión 9.13

Listar imagenes descargadas

Para visualizar las imágenes que ya hemos descargado a nuestro equipo, ejecutamos:

docker images [-a] [-q]
Donde -a y -q son opcionales:

  • -a Las imágenes están formadas por capas. La opción nos muestra todas las imágenes, inclusive aquellas intermedias.
  • -q Nos muestra sólo el ID de las imágenes.

Si queremos listar sólo las imágenes "intermedias" o dangling ejecutamos:

docker images -f dangling=true

Borrar imágenes

Para borrar una imagen descargada, simplemente debemos conocer el ID de la imagen y ejecutar el siguiente comando:

docker rmi <imageID> 

Si en cambio queremos borrar todas las imágenes que hemos descargado, ejecutamos.

docker rmi $(docker images -q)

O bien:

docker rmi $(docker images -q) -f

También:

docker images purge

Borrar imágenes en uso

Sólo se podrán borrar aquellas imágenes que no estén siendo utilizadas por ningún contenedor.

Imágenes personalizadas

Nó sólo podemos emplear las imágenes descargadas de Docker Hub "así como están" sino que podemos personalizarlas según nuestras necesidades.

El archivo Dockerfile

Es un archivo de texto plano que contiene ciertas instrucciones mediante las cuáles crearemos nuestra imagen personalizada de Docker. Su sintaxis básica es la siguiente:

# Comment
INSTRUCTION1 arguments
INSTRUCTION2 arguments
...

Algunas instrucciones de un Dockerfile

A continuación, listamos las instrucciones de Dockerfile más utilizadas

FROM

FROM <imagen>[:tag]
Establece la imagen de base con la que se construirá la imagen personalizada.

MAINTAINER

MAINTAINER <autor> <email>
Nos permite indicar el autor del Dockerfile

RUN

RUN <comandos>
Ejecuta comandos cuando se está construyendo una imagen personalizada.

CMD

CMD <comandos>
Pasa valores por defecto en la imagen para que se ejecuten cuando se lance un contenedor.

COPY

COPY <origen> <destino>
Copia archivos desde local hacia un en el contenedor

ADD

ADD <origen> <destino>
Copia archivos desde local ó remoto hacia un en el contenedor

ENV

ENV <clave=valor>
Inicializa variables de entorno (sistema), con el formato "clave=valor".

EXPOSE

EXPOSE <port>
Indica los puertos TCP/IP por los que se pueden acceder a los servicios del contenedor.

Ejemplos de Dockerfile

Ejemplo de contenido de un Dockerfile que creará una imagen partiendo de Centos e instalará un servidor web:

FROM centos
RUN yum install httpd -y
CMD apachectl -DFOREGROUND

Ejemplo de contenido de un Dockerfile (un poco más complejo) que creará una imagen partiendo de Ubuntu e instalará un servidor web:

FROM ubuntu
ENV TIMEZONE=America/Argentina/Buenos_Aires
RUN ln -snf /usr/share/zoneinfo/$TIMEZONE /etc/localtime \
    && echo $TIMEZONE > /etc/timezone \
    && apt-get update \ 
    && apt-get upgrade -y \
    && apt-get install apache2 -y \
    && apt-get clean
EXPOSE 22 80
CMD ["apache2ctl", "-D", "FOREGROUND"]

Generando imagen a partir del Dockerfile

Para generar una imagen a partir de un archivo Dockerfile, debemos situarnos donde éste y ejecutar el siguiente comando:

docker build -t <ImageName[:tag]> .
Por ejemplo:

docker build -t imagenpersonalizada .

En caso que tengamos más de un Dockerfile (no pueden llamarse de la misma manera) podemos invocar el nombre del archivo Dockerfile con la opción -f:

docker build -t <ImageName[:tag]> [-f <Nombre del Dockerfile>] .

Por ejemplo:

docker build -t imagenpersonalizada . -f miDockerfile