Contenedor Docker para servidor HTTP nginx

Este articulo explica como instalar un contenedor Docker para el servidor HTTP nginx en modo de pruebas local en su PC.

La meta específica a lograr con este articulo es la siguiente:

  • Instalar contenedor Docker oficial del servidor nginx.
  • Uso y buenas prácticas de las distintas herramientas.

Introducción

Docker, es una plataforma para desarrolladores y administradores de sistemas para desarrollar, implementar y ejecutar aplicaciones con contenedores.

Nginx, es un servidor web/proxy inverso ligero de alto rendimiento y un proxy para protocolos de correo electrónico como IMAP/POP3. Es software libre y de código abierto, licenciado bajo la Licencia BSD simplificada.

Figura 1 - Logotipo de nginx

Figura 1 – Logotipo de nginx

El sistema es usado por una larga lista de sitios web conocidos,​ como: WordPress, Netflix, Hulu, GitHub, Ohloh, SourceForge, TorrentReactor y partes de Facebook (como el servidor de descarga de archivos zip pesados).

Instalación

Existen varias imágenes Docker de servidor nginx, en este caso se utilizara la imagen oficial Docker de nginx.

Figura 2 - contenedor Docker de servidor HTTP nginx

Figura 2 – contenedor Docker de nginx

Requisitos previos

Para instalar contenedor Docker oficial para nginx requiere haber leído y debe tener instalado:

Instalando

Luego de cumplir los requerimientos previos, puede instalar el contenedor oficial de Docker, ejecutando el siguiente comando:

$ docker pull nginx

Para más información de las opciones y parámetros del comando docker pull, ejecute el siguiente comando:

$ docker pull --help

De esta forma puede descargar una imagen Docker para nginx en su sistema operativo.

Ejecutar contenedor Docker

Para ejecutar un contenedor Docker en base a la imagen Docker previamente descargada, sólo necesita ejecutar los siguientes comandos:

$ sudo apt install lynx
$ docker run -t -d -p 8080:80 \
         --name nginx_test nginx && lynx localhost:8080

Estos comando previos se describen detalladamente a continuación:

  1. El primero comando instala el navegador web de consola lynx.
  2. El segundo comando le indico a al cliente Docker que ejecute un contenedor del servidor nginx, con los siguientes parámetros:
    1. El parámetro -d indica que la ejecución va a ser autónoma, es decir, que no pare de ejecutarse.
    2. El parámetro -p indica que reenvié la información que el servicio del servidor nginx va a publicar por el puerto por defecto 80 lo publique por el puerto 8080, para evitar que tenga conflicto local con un servicio que use el puerto 80.
    3. El parámetro --name indica el nombre del id del contenedor llamado nginx_test.
    4. El parámetro nginx indica el nombre de la imagen a usar, en este caso, el nombre de la imagen oficial de nginx llamada nginx.
  3. Finalmente, el tercer comando realiza una consulta con el programa lynx el contenido de la página por defecto que se está sirviendo el servidor nginx y muestra el contenido por la consola de comando.

Nota: Este tercer comando se ejecuta en si el segundo comando también se ejecuta.

Estos comando mostrará la siguiente salida en la consola de comando:

Figura 3 - contenedor Docker de nginx ejecutado

Figura 3 – contenedor Docker de nginx ejecutado

Nota: Esto funciona, debido a que por defecto el servidor nginx sirve un archivo que lleve por nombre index.html con la información anteriormente mostrada.

También puede probar el contenido por defecto del servidor nginx servido usando el navegador de su preferencia para acceder a la dirección URL http://localhost:8080/ como se muestra a continuación:

Figura 4 - nginx ejecutado gráficamente vía Docker

Figura 4 – nginx ejecutado gráficamente vía Docker

De esta forma puede ejecutar un contenedor Docker con nginx en su sistema operativo.

Compartir datos entre contenedor y host

Los volúmenes de Docker se utilizan para conservar datos de un directorio o directorios determinados de sus contenedores de Docker. Por lo tanto, sus datos no se eliminan cuando el contenedor se detiene o se elimina. También puede compartir un volumen de Docker con muchos contenedores.

Seguidamente va a personalizar la pagina por defecto del servidor nginx, usando el concepto de Volúmenes de Docker, para descubrir por qué es importante, ejecutando los siguientes comandos:

$ sudo apt install curl
$ mkdir ~/html && echo "Hola Dockeristas." > ~/html/index.html
$ docker run -t -d -p 8888:80 \
         -v ~/html/:/usr/share/nginx/html:ro \
         --name nginx_volumen nginx && curl localhost:8888

Estos comando previos se describen detalladamente a continuación:

  1. El primero comando instala el cliente HTTP llamado curl.
  2. El segundo comando crea un directorio llamado “html” en el home del usuario.
  3. El tercer comando crea dentro del directorio llamado “html” un archivo index.html de prueba con el texto “Hola Dockeristas.”. Nota: Este tercer comando se ejecuta en si el primer y segundo comando también se ejecutan.
  4. El cuarto comando le indico a al cliente Docker que ejecute un contenedor del servidor nginx, con los siguientes parámetros:
    1. El parámetro -d indica que la ejecución va a ser autónoma, es decir, que no pare de ejecutarse.
    2. El parámetro -p indica que reenvié la información que el servicio del servidor nginx va a publicar por el puerto por defecto 80 lo publique por el puerto 8888, para evitar que tenga conflicto local con un servicio que use el puerto 80.
    3. El parámetro -v indica la carpeta “~/html” donde está el archivo index.html que requiero que sea servido en el directorio de publicación del servidor nginx con permisos de read-only.
    4. El parámetro --name indica el nombre del id del contenedor llamado nginx_volumen.
    5. El parámetro nginx indica el nombre de la imagen a usar, en este caso, el nombre de la imagen oficial de nginx llamada nginx.
  5. Finalmente, el quinto comando descarga con el programa curl el contenido de la página que se está sirviendo el servidor nginx y muestra el contenido por la consola de comando.

Nota: Este quinto comando se ejecuta en si el tercer comando también se ejecuta.

Estos comando mostrará la siguiente salida en la consola de comando:

beabce22080d374042c59b7a4d3d1dfcc4f77dd81b932b82847a6e62ad01320d
Hola Dockeristas.

Nota: Esto funciona ya que por defecto si hay múltiples archivos en una carpeta, el servidor nginx sirve el archivo que lleve por nombre index.html.

Además recuerde que puede probar el contenido del archivo index.html personalizado recientemente creado usando el navegador de su preferencia para acceder a la dirección URL http://localhost:8888/

Figura 5 - nginx ejecutado mensaje personalizado vía Docker

Figura 5 – nginx ejecutado mensaje personalizado vía Docker

Ahora vuelva a modificar el archivo index.html y puede notar como el contenido el cual sirve el servidor Nginx es el actualizado, con el siguiente comando:

$ echo "Hola Dockeristas, Nginx funciona correctamente." \
       > ~/html/index.html && curl localhost:8888

Esto comando mostrará la siguiente salida en la consola de comando:

Hola Dockeristas, Nginx funciona correctamente.

Recuerde, puede probar el contenido del archivo index.html personalizado recientemente modificado usando el navegador de su preferencia para acceder a la dirección URL http://localhost:8888/

Figura 6 - nginx con mensaje personalizado vía volúmenes Docker

Figura 6 – nginx con mensaje personalizado vía volúmenes Docker

De esta forma puede ejecutar un contenedor Docker con nginx ejecutado mensaje personalizado vía volúmenes Docker.

Para más información de las opciones y parámetros del comando docker run, ejecute el siguiente comando:

$ docker run --help

Para más información de las opciones y parámetros del comando lynx, ejecute el siguiente comando:

$ lynx --help

Para más información de las opciones y parámetros del comando curl, ejecute el siguiente comando:

$ curl --help

De esta forma puede ejecutar un contenedor Docker con nginx en su sistema operativo.

Auditar procesos del contenedor

Puede auditar los procesos de los contenedores Docker en ejecución, con el siguiente comando:

$ docker ps
CONTAINER ID  IMAGE COMMAND                CREATED        STATUS       
beabce22080d  nginx "nginx -g 'daemon of…" 38 minutes ago Up 38 minutes 
c60a85a08feb  nginx "nginx -g 'daemon of…" 4 minutes ago  Up 4 minutes 
PORTS                NAMES
0.0.0.0:8888->80/tcp nginx_test
0.0.0.0:8888->80/tcp nginx_volumen


…

Para más información de las opciones y parámetros del comando docker ps, ejecute el siguiente comando:

$ docker ps --help

De esta forma puede auditar los procesos en ejecución del contenedor creado previamente en su sistema operativo.

Detener el contenedor

Para detener el contenedor ejecutando el siguiente comando:

$ docker stop nginx_test

Para más información de las opciones y parámetros del comando docker stop, ejecute el siguiente comando:

$ docker stop --help

De esta forma puede detener la ejecución del contenedor creado previamente en su sistema operativo ahorrando recursos de memoria y procesamiento.

Eliminar el contenedor

Si requiere eliminar el contenedor creado previamente, ejecute el siguiente comando:

$ docker rm CONTAINER_ID

Como el contenedor creado previamente se le indico el nombre nginx_test, entonces ejecute el siguiente comando:

$ docker rm nginx_test

Si requiere eliminar el contenedor con su respectivo volumen creado previamente, ejecute el siguiente comando:

$ docker rm -v CONTAINER_ID

Como el contenedor creado previamente con un volumen se le indico el nombre nginx_volumen, entonces ejecute el siguiente comando:

$ docker rm -v nginx_volumen

Para más información de las opciones y parámetros del comando docker rm, ejecute el siguiente comando:

$ docker rm --help

De esta forma puede eliminar el contenedor creado previamente en su sistema operativo ahorrando espacio en disco duro.

Eliminar la imagen

Si requiere eliminar la imagen descargada previamente, ejecute el siguiente comando:

$ docker rmi IMAGE_ID

Como la imagen descargada previamente tiene el nombre nginx, entonces ejecute el siguiente comando:

$ docker rmi nginx

Para más información de las opciones y parámetros del comando docker rmi, ejecute el siguiente comando:

$ docker rmi --help

De esta forma puede eliminar la imagen descargada previamente en su sistema operativo ahorrando espacio en disco duro.

Conclusiones

De esta forma puede usar su contenedor Docker con el servidor HTTP nginx a través de un volumen el cual comparte un directorio y sus archivos con el directorio de publicación del servidor Web.

Este concepto de volumen, yo  quise introducirlo de forma practica en este articulo, para que pueda apreciar como compartir datos entre el contenedor y su sistema operativo, muy útil para respaldar configuraciones, datos de usuarios, archivos cargados por el usuario como imágenes, documentos de ofimática e incluso respaldo de base de datos, los cuales pueden extraerse del contenedor y para ser respaldado fuera de Docker. Planeo publicar el siguiente artículo dedicado a la gestión de almacenamiento con volúmenes en Docker.

En los siguientes artículos espero publicar casos prácticos de implementar tecnologías de servicios para implementar plataformas Web, como motores de base de datos, sistema de administración de contenidos, entre otras mas.

A modo de conclusiones, usted ha aprendido a:

  • Descargar la imagen oficial Docker para nginx.
  • Ejecutar un contenedor de nginx.
  • Gestionar el servicio de nginx vía el contenedor Docker vía consola de comando.

Referencias

¡Haz tu donativo!

Si te gusto este articulo, por favor, ayúdame a seguir escribiendo este tipo de articulo, haciendo donativos en Dólares vía el servicio Paypal haciendo clic aquí o en la siguiente imagen.


PayPal - The safer, easier way to pay online!


También puede realizar su donativo con Bitcoin (BTC) en escaneando el siguiente código QR:

¡Ayúdame a continuar Blog de lcaballero.wordpress.com!

O usando en la siguiente dirección:

bitcoin:13uZUXXqLP3Ct3ksWHXnDqSrbMbhDV9hGz

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s