Saltar al contenido principal

Cómo construir una imagen Docker personalizada de NGINX

Aprende a instalar, configurar y optimizar NGINX en Docker. Esta guía cubre la ejecución de contenedores, el servicio de contenido personalizado, la creación de imágenes, la configuración de un proxy inverso y el uso de Docker Compose para un despliegue eficiente.
Actualizado 26 mar 2025  · 10 min de lectura

NGINX dentro de un contenedor Docker puede proporcionar un servicio web fiable en muchos entornos. Puede que estés trabajando en un sitio web personal, en un servicio web ligero o en un proyecto de laboratorio casero. Docker puede ayudarte a mantener la coherencia entre diferentes máquinas y configuraciones. Este enfoque ofrece una forma de ejecutar NGINX con menos problemas de sobrecarga al pasar del desarrollo a la producción. Es habitual confiar en Docker para empaquetar de forma sencilla el servidor web, lo que facilita compartir tus proyectos sin engorrosos pasos manuales.

Este artículo explica cómo ejecutar una imagen de NGINX ya preparada, cómo servir contenido desde tu máquina local y cómo construir tu imagen con funciones personalizadas. También cubre los pasos de configuración de un proxy inverso, además del uso de Docker Compose para el despliegue multiservicio. Al final, verás cómo gestionar contenedores con unos sencillos comandos y tendrás una visión detallada de cómo integrar Docker y NGINX para tareas prácticas.

Si eres nuevo en Docker, asegúrate de consultar nuestra guía Guía Docker para principiantes para aprender todo lo esencial.

¿Qué es Docker NGINX?

Docker NGINX se refiere a ejecutar el servidor web NGINX dentro de un contenedor ligero. Los contenedores Docker son similares a pequeños paquetes que contienen una aplicación y todas las dependencias que necesita. 

NGINX es un popular servidor web conocido por su gran rendimiento, fácil configuración y gestión flexible del tráfico HTTP. Emparejar NGINX con Docker es atractivo porque mantiene la coherencia del entorno. Si despliegas en macOS, Windows o Linux, el contenido del contenedor sigue siendo el mismo. Eso significa que se comporta de forma idéntica, independientemente del sistema operativo anfitrión.

Una imagen Docker típica para NGINX incluye el software del servidor, una configuración predeterminada y una estructura de directorios para los archivos alojados. Puedes ejecutar ese contenedor inmediatamente o ajustarlo mapeando carpetas específicas, ajustando los archivos de configuración o construyendo una imagen basada en tu propio Dockerfile. Al hacerlo, podrías añadir módulos o scripts personalizados para adaptar NGINX a tu aplicación.

Componentes de Docker NGINX

Para saber más sobre cómo contenerizar aplicaciones, consulta nuestra sección Cómo contenerizar una aplicación con Docker tutorial. Explica con más detalle cómo contenerizar aplicaciones de aprendizaje automático con Docker de forma sencilla para principiantes. 

Requisitos previos

Antes de empezar a ejecutar contenedores NGINX, confirma que Docker está instalado. Docker tiene instaladores oficiales para macOS, Windows y varias distribuciones de Linux. La documentación de Docker proporciona un proceso paso a paso para cada sistema operativo. 

Consulta nuestra Introducción a Docker para obtener una guía completa sobre cómo empezar con Docker.

Prueba tu instalación con un comando rápido como:

docker version
derrickmwiti@Derricks-MacBook-Pro% docker version
Client:
 Version:           28.0.1
 API version:       1.48
 Go version:        go1.23.6
 Git commit:        068a01e
 Built:             Wed Feb 26 10:38:16 2025
 OS/Arch:           darwin/arm64
 Context:           desktop-linux
Server: Docker Desktop 4.39.0 (184744)
 Engine:
  Version:          28.0.1
  API version:      1.48 (minimum version 1.24)
  Go version:       go1.23.6
  Git commit:       bbd0a17
  Built:            Wed Feb 26 10:40:57 2025
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.7.25
  GitCommit:        bcc810d6b9066471b0b6fa75f557a15a1cbf31bb
 runc:
  Version:          1.2.4
  GitCommit:        v1.2.4-0-g6c52b3f
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Si ves los detalles de la versión, significa que Docker está listo. Además del propio Docker, necesitas acceso a Internet para extraer la imagen NGINX de Docker Hub. Si piensas crear tu imagen, necesitarás un editor de texto para escribir un archivo Dockerfile. Cualquier editor de texto funciona bien, pero elige uno que te resulte cómodo.

Configurar NGINX en un contenedor Docker

Ejecutar NGINX desde una imagen ya preparada suele ser el método más rápido. Puedes sacarlo de Docker Hub en cuestión de segundos y luego lanzar un contenedor. A partir de entonces, verás la página por defecto en tu navegador. Este breve proceso suele ser el primer paso en muchas configuraciones de servidores basadas en Docker.

Extraer la imagen Docker de NGINX

La imagen oficial de NGINX está disponible públicamente en Docker Hub con el nombre nginx.

Tira así:

docker pull nginx
derrickmwiti@Derricks-MacBook-Pro % docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
4c7c1a5bd3af: Download complete 
bef2ee7fab45: Download complete 
d9b636547744: Downloading [======================>                            ]  12.58MB/28.04MB
0994e771ba34: Downloading [===>                                               ]  3.146MB/40.56MB
589701e352f8: Download complete 
13f89c653285: Download complete 
8e77214beb25: Download complete 

Esto va al registro y obtiene la última versión. Cuando todo esté completo, puedes comprobar que existe en tu máquina:

docker images
derrickmwiti@Derricks-MacBook-Pro% docker images
REPOSITORY                                                                     TAG                                                                           IMAGE ID       CREATED         SIZE

nginx                                                                          latest                                                                        124b44bfc9cc   6 weeks ago     280MB
keras-custom-training-container                                                latest                                                                                                                                     <none>                                                                        7de0f04013e5   7                                                  

Ese comando muestra una lista de imágenes de tu biblioteca local. Deberías ver la imagen nginx en la tabla. Eso significa que estás preparado para crear un contenedor a partir de él. Descubre una lista de imágenes que necesitarías para tus proyectos de ciencia de datos de nuestro Las 12 mejores imágenes de contenedores Docker para el aprendizaje automático y la IA tutorial.

Ejecutar el contenedor NGINX

Una vez que la imagen NGINX esté en tu sistema, puedes iniciar el contenedor con un solo comando:

docker run --name mynginx -p 8080:80 -d nginx
derrickmwiti@Derricks-MacBook-Pro % docker run --name mynginx -p 8080:80 -d nginx
ec44d1a43016e9684b602437b967c0ed8e11c933a8a76b341b68c25168d2af70

Este comando hace varias cosas. Ejecuta un contenedor llamado mynginx en segundo plano (debido a la opción -d ). Asigna el puerto 8080 de tu máquina anfitriona al puerto 80 dentro del contenedor. Ese mapeo de puertos significa que puedes visitar http://localhost:8080 en tu navegador y ver la página por defecto de NGINX. El contenedor utiliza la imagen nginx extraída de Docker Hub.

El nuevo contenedor debería seguir funcionando porque NGINX está activo. Si compruebas los registros con:

docker logs mynginx
derrickmwiti@Derricks-MacBook-Pro % docker logs mynginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2025/03/20 04:33:10 [notice] 1#1: using the "epoll" event method
2025/03/20 04:33:10 [notice] 1#1: nginx/1.27.4
2025/03/20 04:33:10 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14) 
2025/03/20 04:33:10 [notice] 1#1: OS: Linux 6.10.14-linuxkit
2025/03/20 04:33:10 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2025/03/20 04:33:10 [notice] 1#1: start worker processes
2025/03/20 04:3

Puedes ver cualquier mensaje que haya escrito NGINX. 

Servir contenido personalizado con NGINX

Puede que quieras servir una página HTML, en lugar de la página por defecto incluida en la imagen contenedora. Puedes crear un archivo sencillo en tu máquina local y luego montarlo en el contenedor. Eso mantiene tu contenido separado del contenedor. Cada vez que modifiques tu página, puedes actualizar el navegador para ver el cambio.

Crear una página HTML personalizada

Elige una ubicación conveniente en tu máquina local. Posiblemente una carpeta llamada html_content en tu directorio personal. Crea allí un archivo index.html. Podría ser así:

<html>
<head>
    <title>My NGINX Page</title>
</head>
<body>
    <h1>Hello from my Docker NGINX setup!</h1>
    <p>This is a custom page served from a local folder.</p>
</body>
</html>

Es una página HTML básica. Puedes poner el texto o el estilo que quieras. Añade imágenes o JavaScript, o cualquier otra cosa que se adapte a tus necesidades.

Montar la página HTML en el contenedor NGINX

La imagen oficial de NGINX sirve contenido de /usr/share/nginx/html por defecto. Puedes asignar tu carpeta local a esa ubicación dentro del contenedor. Eso se hace con la bandera -v (volumen) en Docker. Detén cualquier contenedor existente llamado mynginx para evitar un conflicto de puertos:

docker stop mynginx
docker rm mynginx

A continuación, inicia un nuevo contenedor:

docker run --name mynginx -p 8080:80 -d \
    -v /Users/derrickmwiti/Documents/html_content:/usr/share/nginx/html \
    nginx
6f68085733eeac418c3302e5c580a4f7c5c0c36d3591d8e2a7f35f69f6308d18

Sustituye /path/to/html_content por la ruta real de tu ordenador. De esta forma, siempre que navegues a http://localhost:8080el contenedor servirá el archivo HTML que hayas colocado en html_content. Por defecto, si lo llamas index.html, NGINX cargará ese archivo automáticamente.

Montar la página HTML en el contenedor NGINX

Este enfoque es beneficioso cuando quieres ajustar el contenido con regularidad. No es necesario que reconstruyas el contenedor cada vez. El servidor extrae el contenido de tu carpeta local sobre la marcha. 

Si ves una advertencia relacionada con los permisos, puede que tengas que asegurarte de que tu usuario local y Docker pueden leer esa carpeta. 

En Linux, eso puede significar ajustar la propiedad o los permisos de los archivos. En Windows o macOS, puede significar conceder a Docker permiso para acceder a tu unidad.

Crear una imagen Docker personalizada de NGINX

Montar una carpeta local es una solución rápida para pruebas sencillas. Puede que quieras módulos adicionales, una configuración especial o algún otro ajuste. Ahí es donde construir una imagen puede ser útil. 

Docker facilita la creación de un pequeño archivo de recetas, conocido como Dockerfile, que configura un contenedor exactamente como tú quieres. Entonces tendrás una imagen que podrás compartir con los demás o enviar a un registro. Eso puede ser más cómodo que decirle a la gente que monte un montón de archivos locales.

Crear un archivo Dockerfile

Un Dockerfile no es más que un archivo de texto plano. Puedes llamarlo Dockerfile o elegir otro nombre si lo prefieres. Colócalo en un directorio nuevo. He aquí un ejemplo sencillo:

FROM nginx:latest

COPY index.html /usr/share/nginx/html/index.html

Utiliza como base la imagen oficial de nginx:latest. A continuación, copia un archivo local llamado index.html en la carpeta de contenido web por defecto del contenedor. Puedes incluir más líneas si las necesitas. Por ejemplo, puedes copiar un nginx.conf personalizado o añadir módulos que quieras instalar. Eso depende de tus necesidades. Si sólo quieres colocar una página estática, el fragmento anterior es suficiente.

Cuando tengas ese Dockerfile en su sitio, añade el index.html personalizado en la misma carpeta. Entonces podrás construir. El comando típico es:

docker build -t mynginximage .
[+] Building 2.6s (7/7) FINISHED                                                                                                                                                       docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                                                                                   0.0s
 => => transferring dockerfile: 245B                                                                                                                                                                   0.0s
 => [internal] load metadata for docker.io/library/nginx:latest                                                                                                                                        0.0s
 => [internal] load .dockerignore                                                                                                                                                                      0.0s
 => => transferring context: 2B                                                                                                                                                                        0.0s
 => [internal] load build context                                                                                                                                                                      0.0s
 => => transferring context: 365B                                                                                                                                                                      0.0s
 => [1/2] FROM docker.io/library/nginx:latest@sha256:124b44bfc9ccd1f3cedf4b592d4d1e8bddb78b51ec2ed5056c52d3692baebc19                                                                                  2.3s
 => => resolve docker.io/library/nginx:latest@sha256:124b44bfc9ccd1f3cedf4b592d4d1e8bddb78b51ec2ed5056c52d3692baebc19                                                                                  2.3s
 => [2/2] COPY index.html /usr/share/nginx/html/index.html                                                                                                                                             0.0s
 => exporting to image                                                                                                                                                                                 0.1s
 => => exporting layers                                                                                                                                                                                0.0s
 => => exporting manifest sha256:19dd719772fd7ac839fadb7d49862f84422f4571a442994ffaca152e9674553a                                                                                                      0.0s
 => => exporting config sha256:e974f3ab92a0278e419f0fe4c5a6fc43fafb4a75da27895d90c4f2d5d385daa1                                                                                                        0.0s
 => => exporting attestation manifest sha256:e391b0212e5a100bd9132fbbd6cb4052e288dbbcba093839b55f8b197131372b                                                                                          0.0s
 => => exporting manifest list sha256:d35c2bbe10ab0b7e46d1ef8fba6c6cb28628eb9c283db02607e32e95b62e14d5                                                                                                 0.0s
 => => naming to docker.io/library/mynginximage:latest                                                                                                                                                 0.0s
 => => unpacking to docker.io/library/mynginximage:latest                                                                                                                                              0.0s

El punto al final indica que el directorio actual es el contexto de construcción. Docker lee el Dockerfile en ese directorio. Terminarás con una imagen llamada mynginximage en tu sistema local. Compruébalo con:

docker images
mynginximage                                                                   latest                                                                        d35c2bbe10ab   36 seconds ago   281MB

Deberías ver el nuevo nombre en la lista. Este enfoque significa que tu Dockerfile y el HTML se combinan en una sola imagen. No tienes que montar nada en tiempo de ejecución.

Construir y ejecutar la imagen personalizada

Ahora que tienes construido mynginximage, puedes ejecutarlo:

docker run --name mycustomnginx -p 8080:80 -d mynginximage

Asegúrate de detener el contenedor anterior para evitar conflictos de puertos. 

Este contenedor sirve automáticamente la página que colocaste en el Dockerfile. Si abres un navegador en http://localhost:8080, deberías ver ese texto HTML. 

Construir y ejecutar la imagen personalizada

Puedes compartir tu Dockerfile con otros o enviar la imagen creada a un registro. Luego, tus compañeros de equipo o colegas pueden ponerlo en marcha sin copiar las carpetas locales.

Esto completa el proceso de creación de una imagen NGINX personalizada mínima. Has partido de la base oficial, has copiado uno o dos archivos y has creado un nuevo contenedor que incluye tu sitio personalizado. Puedes ampliar aún más el archivo Dockerfile. Por ejemplo, puede que quieras cambiar la configuración para gestionar PHP con php-fpm en una compilación multietapa o añadir módulos personalizados que NGINX no incluye por defecto.

Este enfoque pone de relieve la flexibilidad de Docker: cada capa del Dockerfile puede encargarse de una tarea determinada, y la imagen final puede distribuirse fácilmente. Tienes control sobre el contenido web, además de la opción de ajustar la configuración para que tu contenedor se adapte a tu proyecto. 

Explora estas 10 ideas de proyectos Docker para aprender Docker con proyectos prácticos centrados en la creación y optimización de aplicaciones de ciencia de datos.

Configurar NGINX como proxy inverso

NGINX puede dirigir las peticiones entrantes a otros servicios del mismo sistema o incluso a servicios que se ejecuten en máquinas distintas. A esto se le suele llamar configuración de proxy inverso. Puedes colocar NGINX delante de un grupo de aplicaciones para que las peticiones pasen por un único punto de entrada. 

Esto es habitual cuando tienes varios contenedores Docker escuchando en puertos diferentes, y quieres un único nombre de dominio para todo. NGINX escucha en un puerto estándar, como 80 o 443, y luego dirige el tráfico al servicio correcto en función de la ruta, el nombre de host u otros factores.

Comprender el proxy inverso

Cuando NGINX está configurado de esta forma, el cliente no es consciente de la comunicación en segundo plano. NGINX actúa como la cara pública, recibiendo y reenviando las peticiones y devolviendo las respuestas al cliente. 

Este diseño simplifica la estructura de tu red. También ofrece la oportunidad de ajustar el almacenamiento en caché, añadir certificados TLS, gestionar el equilibrio de carga o realizar otras tareas avanzadas. A menudo es más fácil gestionar estas tareas en un único lugar, en lugar de dispersarlas entre varios servicios.

Un escenario típico podría implicar un contenedor que ejecuta NGINX en el puerto 80, que envía peticiones a un contenedor de aplicación en el puerto 3000. Mientras el cliente visita http://yourdomain.com, el tráfico se dirige a un contenedor independiente entre bastidores. 

Eso podría permitir a tu contenedor de aplicaciones mantener su puerto por defecto, con una sobrecarga mínima para el usuario. Otra razón para hacerlo es que tal vez quieras ocultar los detalles internos de tus servicios o presentar una estructura de URL uniforme.

Configurar NGINX para proxy inverso

Para conseguirlo, necesitas un archivo de configuración para NGINX personalizado que utilice directivas proxy. Puedes hacerlo montando un nuevo archivo de configuración cuando ejecutes el contenedor, o construyendo una imagen personalizada que lo incluya. He aquí un ejemplo sencillo para ilustrar la idea general:

server {
    listen 80;

    location / {
        proxy_pass http://myapp:3000/;
    }
}

En el fragmento anterior, cualquier petición que llegue a tu contenedor NGINX por el puerto 80 se envía a myapp:3000. El nombre myapp sugiere que hay otro contenedor accesible con ese nombre, lo que es habitual cuando utilizas la red Docker .

Si utilizas contenedores autónomos, puedes asignar la dirección IP del contenedor o utilizar la IP del host. También puedes añadir configuraciones más avanzadas, como proxy_set_header Host $host, o ajustar los valores de tiempo de espera para adaptarlos a tu aplicación.

Si optas por montar este archivo en tiempo de ejecución, puedes hacer algo así:

docker run --name nginxproxy -p 8080:80 -d \
    -v /path/to/nginx.conf:/etc/nginx/conf.d/default.conf \
    --network mynetwork \
    nginx

Este comando ejecuta el contenedor NGINX, montando tu nginx.conf local como configuración por defecto. También conecta el contenedor a una red Docker llamada mynetwork, donde reside tu otro contenedor (myapp). Suele ser el enfoque más sencillo si quieres mantener tu configuración fuera del contenedor. 

También es posible poner ese archivo en un Dockerfile si quieres una disposición estática. Cualquiera de los dos enfoques puede funcionar, siempre que las referencias coincidan con la forma en que nombraste tus contenedores y redes.

Este diseño te permite tener un único dominio o IP para todos tus servicios web, junto con un puerto común. Si trabajas con varios contenedores back-end, podrías definir varias ubicaciones en tu configuración, cada una apuntando a un puerto de contenedor distinto. NGINX puede entonces enrutar a cada servicio basándose en la ruta URL. Es un enfoque popular para los microservicios porque consolida los puntos de entrada de forma ordenada.

Uso de Docker Compose para el despliegue de NGINX

Un proxy inverso suele ser más útil cuando tienes varios contenedores que trabajan juntos. Docker Compose es una herramienta que te permite definir muchos servicios en un único archivo. Luego, puedes subirlas o bajarlas con una sola orden. Reduce la posibilidad de errores en la creación de contenedores o en la asignación de puertos, porque todos los detalles residen en un archivo estándar.

Introducción a Docker Compose

Docker Compose te permite gestionar conjuntos de contenedores. Describes cada servicio, especificas la imagen a utilizar, los puertos a publicar, los volúmenes a montar y las redes a las que unirse. Entonces un simple comando (docker compose up -d) lo pondrá todo en marcha a la vez .

Este enfoque es útil para el desarrollo local o para entornos de ensayo en los que necesites coordinar varios contenedores Docker. El formato de archivo habitual es YAML.

Aunque Docker Compose puede funcionar en varios sistemas operativos, debes asegurarte de que está instalado y reconocido. Las instalaciones modernas de Docker Desktop suelen incluirlo por defecto. Comprueba tu versión con:

docker compose version
Docker Compose version v2.33.1-desktop.1

Si ves los detalles de la versión, estás listo para continuar. Si no es así, consulta la documentación de Docker para saber cómo activar o instalar Docker Compose.

Crear un archivo docker-compose.yml

El archivo suele incluir una sección de servicios. A continuación se muestra un ejemplo sencillo de un archivo docker-compose.yml que configura un único contenedor NGINX para servir contenido estático: 

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html

He aquí cómo interpretar el archivo:

  • servicios: Define los servicios (contenedores) que componen tu aplicación.
  • web: Este servicio utiliza la última imagen de NGINX.
    • puertos: Asigna el puerto 80 dentro del contenedor al puerto 8080 en tu máquina anfitriona. Esto te permite acceder al servidor web a través de http://localhost:8080.
    • volúmenes: Monta el directorio local html en el directorio de contenido por defecto de NGINX dentro del contenedor (/usr/share/nginx/html). Esta configuración permite a NGINX servir tu contenido estático personalizado.

Desplegar servicios con Docker Compose

En el mismo directorio que tu archivo docker-compose.yml, crea un subdirectorio llamado html.

Coloca tus archivos HTML estáticos (por ejemplo, index.html) dentro de este directorio html. En este caso, he creado una página sencilla con estilo Bootstrap para la demostración. 

Abre un terminal y navega hasta el directorio de tu proyecto que contiene el archivo docker-compose.yml.

Ejecuta el siguiente comando para iniciar el servicio:

docker compose up -d
[+] Running 1/1
 ✔ Container html_content-web-1  Started 

La bandera -d ejecuta el contenedor en modo separado, permitiéndole funcionar en segundo plano.

Docker Compose consulta el archivo docker-compose.yml en el directorio actual. Extrae las imágenes que aún no estén presentes y, a continuación, lanza cada contenedor. 

Abre tu navegador y navega hasta http://localhost:8080.

Deberías ver tu contenido estático siendo servido por NGINX.

Desplegar servicios con Docker Compose

Puedes inspeccionar el estado de tus servicios en ejecución comprobando:

docker compose ps

Si necesitas desmontarlo todo, un solo comando puede eliminar los contenedores:

docker compose down

Eso las detiene y las elimina todas a la vez. Si quieres replicar todo el entorno, sólo tienes que copiar el archivo Docker Compose y el código correspondiente a una nueva máquina, y luego ejecutar los mismos comandos. Esto garantiza que obtengas resultados coherentes con un mínimo de pasos manuales.

Gestión de Contenedores NGINX

Aunque el enfoque Docker Compose es popular para flujos de trabajo multiservicio, a veces sólo necesitas gestionar un único contenedor o un pequeño clúster. Docker proporciona unos cuantos comandos básicos que te ayudan a ver lo que se está ejecutando, pausar o detener contenedores y eliminarlos si es necesario. 

Son esenciales para el mantenimiento, especialmente si estás experimentando con varios contenedores NGINX o compilaciones repetidas.

Ver contenedores en ejecución

Siempre que quieras ver qué contenedores se están ejecutando, puedes utilizar

docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                  NAMES
2d386c085129   mynginximage   "/docker-entrypoint.…"   4 minutes ago   Up 4 minutes   0.0.0.0:8080->80/tcp   mycustomnginx

Ese comando imprime una tabla de los contenedores activos, cada uno con un ID, imagen, nombre, etc. Si necesitas ver todos los contenedores, incluidos los que se han parado, utiliza

docker ps -a

Muestra todos los contenedores que existen en tu sistema, incluso los que han salido. A menudo es útil ver qué contenedores siguen ahí de tiradas anteriores. Es posible que tengas contenedores con los nombres mynginx, mycustomnginx, o cualquier otro si has estado experimentando con varias imágenes.

Parar y retirar contenedores

Cuando hayas terminado con un contenedor, puedes detenerlo por su nombre:

docker stop mynginx
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                  NAMES
2d386c085129   mynginximage   "/docker-entrypoint.…"   4 minutes ago   Up 4 minutes   0.0.0.0:8080->80/tcp   mycustomnginx

Eso indica a Docker que envíe una señal de parada al contenedor, lo que debería hacer que NGINX se apagara limpiamente. Si quieres retirar el recipiente justo después, puedes hacerlo:

docker rm mynginx

Si prefieres un único comando que pare y elimine de una sola vez, prueba:

docker rm -f mynginx

Eso fuerza la retirada, deteniendo el contenedor si aún está en marcha. Ten cuidado al utilizar este enfoque en un entorno de producción, ya que termina el contenedor sin darle un apagado graceful. Otro comando de limpieza es docker rmi, que elimina imágenes de tu sistema .

Esto es útil si ya no necesitas determinadas imágenes y quieres liberar espacio. Sin embargo, Docker sólo borra las imágenes que no están siendo utilizadas por un contenedor en ejecución.

Conclusión

NGINX en Docker es una forma práctica de servir páginas web o dirigir el tráfico a otros servicios. Puedes ejecutar la imagen oficial o crear la tuya propia con un simple archivo Dockerfile. Docker Compose puede coordinar varios contenedores, haciendo que las configuraciones complejas sean más fáciles de manejar. 

Con estos métodos, puedes entregar contenidos, gestionar el reenvío y mantener un entorno fiable para los proyectos web. 

Si necesitas un enfoque más práctico para aprender Docker, consulta nuestro Curso de Introducción a Docker para descubrir su importancia en el conjunto de herramientas del profesional de los datos.

Preguntas frecuentes sobre NGINX Docker

¿Cómo puedo ejecutar un contenedor NGINX utilizando Docker?

Puedes iniciar un contenedor NGINX con el siguiente comando:

docker run --name mynginx -p 8080:80 -d nginx

Esto ejecuta un contenedor NGINX en segundo plano y asigna el puerto 8080 de tu máquina al puerto 80 dentro del contenedor. Puedes acceder a ella visitando http://localhost:8080 en tu navegador.

¿Cómo puedo servir contenido personalizado con NGINX en Docker?

Para servir tus archivos HTML, monta un directorio local en el contenedor NGINX de la siguiente manera:

docker run --name mynginx -p 8080:80 -d -v /path/to/html:/usr/share/nginx/html nginx

Sustituye /ruta/a/html por la ruta real a tus archivos HTML. El contenedor servirá el contenido de ese directorio en lugar de la página por defecto.

¿Cómo configuro NGINX como proxy inverso en Docker?

Crea un archivo nginx.conf personalizado con el siguiente contenido:

server {
    listen 80;
    location / {
        proxy_pass http://myapp:3000/;
    }
}

A continuación, ejecuta el contenedor NGINX con el archivo de configuración montado:

docker run --name nginxproxy -p 8080:80 -d -v /path/to/nginx.conf:/etc/nginx/conf.d/default.conf nginx

Esto reenviará las peticiones de http://localhost:8080 a tu aplicación que se ejecuta en el puerto 3000.

¿Cómo puedo utilizar Docker Compose para desplegar NGINX con otros servicios?

Crea un archivo docker-compose.yml con el siguiente contenido:

services:
  myapp:
    image: myappimage
    expose:
      - "3000"

  nginxproxy:
    image: nginx
    ports:
      - "8080:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - myapp

Ejecuta los servicios con:

docker compose up -d

Esto inicia tu aplicación y el proxy NGINX en un solo comando.

¿Cómo detengo y elimino un contenedor NGINX en Docker?

Para detener un contenedor NGINX en ejecución, utiliza:

docker stop mynginx

Para eliminar completamente el contenedor, ejecuta

docker rm mynginx

Si quieres eliminar el contenedor y su imagen, también puedes eliminar la imagen con:

docker rmi nginx

Esto limpia el contenedor y su imagen almacenada de tu sistema.

Temas

Los mejores cursos de DataCamp

Programa

Containerization and Virtualization with Docker and Kubernetes

0 min
Learn the power of Docker and Kubernetes, this interactive track will allow you to build and deploy applications in modern environments.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow