Docker - Generación de una imagen para distribución de aplicaciones

En este tutorial, se verá como crear un archivo Dockerfile con las herramientas necesarias que nos permitan publicar sitios web o aplicaciones utilizando Docker.

Se asume que se tiene conocimientos básicos sobre Linux y que sudo se encuentra instalado y configurado.

El ejemplo se realiza sobre Debian 9.

Para comenzar se debe instalar Docker con los comandos que se detallan a continuación:

  1. $ sudo apt update
  2. $ sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common
  3. $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
  4. $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
  5. $ sudo apt update
  6. $ sudo apt install docker-ce

Una vez instaldo docker podemos verificar que se encuentre ejecutando de la siguiente manera:

  1. $ sudo systemctl status docker

Si el servicio se encuentra activo estaremos listos para crear el contenedor.

Los contenedores en Docker se conocen como virtualización ligera ya que solo crea un pequeño kernel con las librerías y dependencias necesarias para realizar una tarea en particular. Los contenedores se crean a partir de imágenes que tienen esas librerías y dependencias mínimas. Las imágenes base se pueden descargar de aquí: Docker Hub

En el buscador se puede escribir debian y se listarán todas las imágenes que hacen referencia a debian. Para descargar una imagen utilizando el nombre "debian" se utiliza el siguiente comando:

  1. $ sudo docker pull debian

La imagen descargada contiene las librerías y dependencias básicas de esta distribución. Por ejemplo se podría necesitar desplegar una págia web por lo que será necesaerio tener instalado y corriendo Apache.

Entonces, si lo que queremos es desplegar una aplicación, podemos utilizar la imagen base y agregar las dependencias adicionales. Para esto, Docker creó el concepto de Dockerfile. Un Dockerfile es un archivo con instrucciones que ejecutará Docker sobre una imagen preexistente a modo de agregar las dependencias y librerías requeridas.

El Dockerfile es un archivo de texto que se pude crear con cualquier editor pero debe estar dentro de una carpeta que representa el proyecto.

Un archivo Dockerfile, empieza con la siguiente línea:

  1. FROM debian:latest

Esto le dice a Docker que utilice como imagen base la última versión de la imagen de debian.

El siguiente paso será instalar Apache. Para esto Docker utiliza el comando RUN que le dice que deberá ejecutar un paso durante la construcción de la nueva imagen.

  1. RUN apt-get update
  2. RUN apt-get install -y apache2

Para definir variables de entorno Docker utiliza el comando ENV.

  1. ENV APACHE_RUN_USER www-data
  2. ENV APACHE_RUN_GROUP www-data
  3. ENV APACHE_LOG_DIR /var/log/apache2

A diferencia de las máquinas virtuales, en los contenedores de Docker se debe especifiar los servicios que serán inicados. Para esto Docker dispone del comando ENTRYPOINT.

  1. ENTRYPOINT ["/usr/sbin/apache2"]

Finalmente si queremos que Docker ejecute alguna instrucción al momento de arrancar el contenedor se utiliza el comando CMD.

  1. CMD ["-D", "FOREGROUND"]

Finalmente guardar el archivo Dockerfile y para crear la imagen ejecutar:

  1. $ sudo docker image build -t apache-debian:1.0 .

El sifuiente comando, listará las imágenes disponibles.

  1. $ sudo docker image list

Para crear un contenedor a partir de la imagen se puede ejecutar:

  1. $ sudo docker run apache-debian:1.0

Una vez iniciado el contenedor se podrá acceder a la página de inicio de apache2 desde un navegador.

El contenedor ha sido creado y tiene Apache2 ejecutándose. Para publicar nuestra aplicación que en este caso será un archivo index.html que puede descargarlo de aquí: index.html deberá estar en la misma carpeta del archivo Dockerfile.

Para copiar el archivo index.html a la imagen se puede utilizar el comando COPY al interior de Dockerfile.

  1. COPY index.html /var/www/html

Si desea descargar el Dockerfile completo pulse aquí.

© ADSIB 2019 Bolivia