1- imagen oficial de Nginx-Tutorial Docker: Servir una página web -volumes: - ./ruta/local:/ruta/en/contenedor
El . significa "busca el Dockerfile en la carpeta actual".
¿Qué hace - ./:/var/www/html?
./es la carpeta actual de tu host (donde está eldocker-compose.yml)./var/www/htmles la ruta dentro del contenedor.Efecto: Todo lo que esté en
./se ve dentro del contenedor en/var/www/html, y todo lo que se cree dentro del contenedor en/var/www/htmlaparecerá automáticamente en tu./. Es una sincronización bidireccional y en tiempo real.
******************************************
Instalar Docker desde el repositorio oficial
Sigue estos pasos para configurar el repositorio oficial e instalar Docker.
Actualiza los paquetes e instala las dependencias necesarias:
sudo apt update sudo apt install ca-certificates curl -yAgrega la clave GPG oficial de Docker:
sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.ascAgrega el repositorio oficial de Docker a las fuentes de APT:
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullActualiza el índice de paquetes e instala Docker:
sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
***********************
Instalar docker y grupo de usuraio
Tutorial Docker: Servir una página web personalizada con imagen oficial
En este tutorial aprenderás a usar una imagen oficial de Docker, estructurar tus archivos y visualizar tu propia página HTML en un contenedor. Utilizaremos la imagen oficial de Nginx, una de las más populares para servir contenido estático.
Requisitos previos
Tener Docker instalado en tu sistema.
(Comprueba condocker --version)Conocimientos básicos de línea de comandos.
Paso 1: Crear la estructura de archivos
Crea una carpeta para tu proyecto, por ejemplo mi-web-docker, y dentro de ella coloca tu archivo HTML personalizado.
mkdir mi-web-docker
cd mi-web-dockerDentro de esta carpeta, crea tu archivo index.html con el siguiente contenido:
echo "<html><body><h1>¡Mi Web Personalizada!</h1><p>Usando imagen oficial</p></body></html>" > index.htmlLa estructura de archivos quedará así:
mi-web-docker/
└── index.htmlPaso 2: Elegir la imagen oficial
Usaremos la imagen oficial de Nginx disponible en Docker Hub: nginx:latest. Esta imagen viene con una configuración por defecto que sirve los archivos estáticos desde /usr/share/nginx/html.
Paso 3: Ejecutar el contenedor con montaje de volumen
Para que Nginx sirva nuestro archivo index.html, debemos montar la carpeta local dentro del contenedor, reemplazando el contenido por defecto.
Ejecuta el siguiente comando:
docker run -d -p 8080:80 --name mi-web -v $(pwd):/usr/share/nginx/html nginx:latestExplicación de cada parte:
| Parámetro | Descripción |
|---|---|
docker run | Comando para crear y ejecutar un contenedor. |
-d | Modo detached (en segundo plano). |
-p 8080:80 | Mapea el puerto 80 del contenedor al puerto 8080 de tu máquina. |
--name mi-web | Asigna un nombre al contenedor para manejarlo fácilmente. |
-v $(pwd):/usr/share/nginx/html | Monta la carpeta actual (pwd) dentro del contenedor en la ruta donde Nginx busca los archivos. |
nginx:latest | Imagen oficial de Nginx. |
Paso 4: Verificar que el contenedor está corriendo
Lista los contenedores activos:
docker psDeberías ver algo como:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abcd1234... nginx:latest "/docker-entrypoint.…" 5 seconds ago Up 4 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp mi-webPaso 5: Acceder a la página web
Abre tu navegador y ve a:
http://localhost:8080Verás el mensaje:
¡Mi Web Personalizada!
Usando imagen oficial
¡Ya tienes tu sitio funcionando con Docker!
Paso 6: Modificar el contenido en tiempo real
Gracias al montaje de volumen, cualquier cambio que hagas en index.html se reflejará inmediatamente sin necesidad de reiniciar el contenedor.
Por ejemplo, edita el archivo:
echo "<html><body><h1>Hola desde Docker</h1><p>Actualizado al instante</p></body></html>" > index.htmlRefresca la página y verás los cambios al instante.
Paso 7: Detener y eliminar el contenedor
Cuando hayas terminado, detén y elimina el contenedor:
docker stop mi-web
docker rm mi-webO si quieres eliminar el contenedor al detenerlo:
docker rm -f mi-webEstructura final de archivos (resumen)
mi-web-docker/
└── index.html # Tu archivo HTML personalizadoVariantes con otras imágenes oficiales
Puedes usar otras imágenes oficiales de servidores web:
Apache HTTP Server (
httpd:latest): el punto de montaje es/usr/local/apache2/htdocs/.Python HTTP Server (
python:3-alpine): usapython -m http.servery monta en el directorio de trabajo.
Ejemplo con Apache:
docker run -d -p 8080:80 --name mi-web-apache -v $(pwd):/usr/local/apache2/htdocs/ httpd:latestConclusión
Has aprendido a:
Crear una estructura de archivos local.
Usar una imagen oficial de Docker (Nginx).
Montar un volumen para servir contenido personalizado.
Visualizar la página en tu navegador.
Modificar el contenido sin reconstruir el contenedor.
Este flujo es la base para desarrollar y probar sitios web estáticos con Docker de manera ágil y profesional.
**************************************************
Tal como lo dices, gracias al volumen tipo bind (el -v $(pwd):/usr/share/nginx/html), tu carpeta local mi-web-docker/ está enlazada directamente dentro del contenedor.
Si quieres ingresar al contenedor para ver dónde está físicamente la página, la ruta interna es:
/usr/share/nginx/html/
Aquí te explico paso a paso cómo entrar y verificarlo:
1. Ingresar al contenedor (shell interactivo)
Como tu contenedor se llama mi-web (por el --name que usaste), ejecuta:
docker exec -it mi-web /bin/bashNota: Si te da error porque no encuentra
bash, prueba consh(las versiones más ligeras de Nginx a veces solo traensh):docker exec -it mi-web /bin/sh
2. Navegar hasta la carpeta de la página
Una vez dentro, ve a la ruta donde Nginx sirve los archivos por defecto:
cd /usr/share/nginx/html3. Listar los archivos
Ejecuta un ls -la y verás tu index.html:
ls -laLa salida mostrará algo como:
total 4
drwxr-xr-x 2 root root 4096 ... .
drwxr-xr-x 1 root root 4096 ... ..
-rw-r--r-- 1 root root 100 ... index.html4. Ver el contenido desde dentro
Puedes leerlo directamente con cat:
cat index.htmlVerás el texto: <html><body><h1>¡Mi Web Personalizada!</h1>...
Dato curioso (y muy útil)
Como es un volumen montado, cualquier cambio que hagas desde dentro del contenedor en esa ruta, se reflejará automáticamente en tu carpeta local mi-web-docker/ (y viceversa).
Por ejemplo, desde dentro del contenedor puedes modificar el archivo:
echo "<h1>Editado desde dentro</h1>" > index.htmlSal del contenedor (exit), y si abres tu archivo index.html en tu máquina local, verás que también cambió.
Alternativa: Ver la ruta sin entrar al shell
Si solo quieres confirmar que el archivo existe sin necesidad de abrir una terminal interactiva, puedes ejecutar este comando directo desde tu máquina host:
docker exec mi-web cat /usr/share/nginx/html/index.html¡Así de sencillo! La magia de Docker es que esa carpeta es el punto de encuentro entre tu computadora y el contenedor
***********************************************SIN VOLUMENES
Cuando no usas volúmenes, el contenedor queda aislado y no tiene acceso a tu carpeta local. Para meter tu página ahí tienes dos formas principales (una más casual y otra profesional):
Método 1: Copiar el archivo al contenedor en marcha (docker cp)
Este método es rápido para hacer pruebas puntuales, pero no es permanente (si eliminas el contenedor, la página desaparece).
Paso a paso:
Ejecuta un contenedor Nginx normal (sin montar nada):
docker run -d -p 8080:80 --name mi-web-sin-vol nginx:latestCopia tu
index.htmldesde tu máquina hacia adentro del contenedor:docker cp index.html mi-web-sin-vol:/usr/share/nginx/html/Abre el navegador en
http://localhost:8080y verás tu página.
⚠️ Limitaciones:
Si el contenedor se reinicia, el archivo sigue ahí (porque el sistema de archivos del contenedor persiste mientras existe).
Si eliminas el contenedor (
docker rm), el archivo se pierde para siempre.No hay sincronización: si cambias el archivo en tu PC, no se actualiza dentro del contenedor a menos que vuelvas a ejecutar
docker cp.
Método 2: Construir tu propia imagen personalizada (¡La recomendada!)
Aquí empaquetas tu HTML dentro de la imagen. Es la forma profesional y portátil: puedes subir esa imagen a un registro (Docker Hub) y funcionará en cualquier lado sin depender de archivos externos.
Paso a paso:
Crea un archivo llamado
Dockerfile(sin extensión) en tu carpetami-web-docker/con este contenido:# Usamos la imagen oficial de Nginx como base FROM nginx:latest # Copiamos nuestro index.html desde la carpeta local hacia la ruta interna de Nginx COPY index.html /usr/share/nginx/html/Construye (build) tu imagen personalizada:
docker build -t mi-web-personalizada .El
.significa "busca el Dockerfile en la carpeta actual".Ejecuta un contenedor basado en tu nueva imagen (sin volúmenes):
docker run -d -p 8080:80 --name mi-web-propia mi-web-personalizadaAbre el navegador en
http://localhost:8080y ¡voilá!
Ventajas de este método:
La página viaja dentro de la imagen. Puedes compartirla con otros o desplegarla en producción sin carpetas externas.
Es idempotente: cada vez que crees un contenedor de esta imagen, tendrá tu página.
Desventaja:
Si quieres cambiar el texto del HTML, tienes que reconstruir la imagen (
docker buildde nuevo) y reiniciar el contenedor. No es "en caliente" como con los volúmenes.
Comparativa rápida
| Característica | Con Volumen (-v) | Con docker cp | Con Dockerfile (COPY) |
|---|---|---|---|
| Sincronización | Inmediata (en ambos sentidos) | No sincroniza | No sincroniza |
| Persistencia al eliminar | Los archivos quedan en tu PC | Se pierden | Viajan dentro de la imagen |
| Ideal para | Desarrollo / Live-reload | Pruebas rápidas y puntuales | Producción / Distribución |
| Cambios en caliente | Sí (editas en PC y se ve al refrescar) | No (toca copiar de nuevo) | No (toca reconstruir) |
¿Y si quiero inspeccionar dónde quedó la página sin volúmenes?
El procedimiento es idéntico al que te expliqué antes: la ruta interna siempre es /usr/share/nginx/html/ (en Nginx). Si entras al contenedor con:
docker exec -it mi-web-propia /bin/bash
cd /usr/share/nginx/html
cat index.htmlVerás tu archivo, pero si intentas modificarlo desde dentro, no se reflejará en tu carpeta local porque no hay un enlace (volumen) entre ambas.
En resumen:
Sin volúmenes, el contenedor es una "cápsula" cerrada. Si solo es para probar, usa docker cp. Si es para un proyecto serio o desplegar, construye tu propia imagen con un Dockerfile (Método 2). ¿Cuál de los dos te gustaría probar primero
************************************************************
************************************************
Limpieza completa del tutorial "Imagen oficial + volumen"
Este tutorial mezcla dos cosas: la instalación de Docker y el proyecto de la web con Nginx usando imagen oficial y montaje de volumen. Aquí tienes cómo dejar todo limpio, por partes.
🟢 Parte A: Limpiar el proyecto de la web (contenedor + carpeta)
Paso 1: Detener y eliminar el contenedor
Si el contenedor sigue corriendo:
docker stop mi-web
docker rm mi-webO en un solo comando (forzando):
docker rm -f mi-web⚠️ El tutorial menciona un contenedor llamado
mi-web. Si creaste el de Apache, se llamami-web-apache. Elimínalo también si existe:
docker rm -f mi-web-apachePaso 2: Verificar que ya no existe
docker ps -aNo deberías ver mi-web ni mi-web-apache en la lista.
Paso 3: Eliminar la carpeta del proyecto
Linux / macOS:
cd ..
rm -rf mi-web-dockerWindows (PowerShell):
cd ..
Remove-Item -Recurse -Force mi-web-dockerWindows (CMD):
cd ..
rmdir /s /q mi-web-docker💡 Aquí no hay imagen que borrar porque usaste
nginx:latestdirectamente (imagen oficial). A diferencia del otro tutorial, no construiste una imagen propia condocker build. Por eso no haydocker rmi mi-web:v1que hacer.
Paso 4: ¿Quieres borrar también la imagen oficial nginx:latest?
Solo si no la usas en otros proyectos:
docker rmi nginx:latestSi usaste Apache:
docker rmi httpd:latest🟡 Parte B: ¿Desinstalar Docker por completo?
Si lo que quieres es eliminar Docker del sistema (porque ya no lo necesitas), aquí está el procedimiento para Ubuntu/Debian:
Paso 1: Detener el servicio de Docker
sudo systemctl stop docker
sudo systemctl stop docker.socket
sudo systemctl stop containerdPaso 2: Eliminar los paquetes de Docker
sudo apt purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extrasPaso 3: Eliminar dependencias huérfanas
sudo apt autoremove -yPaso 4: Eliminar los datos de Docker (⚠️ borra todo: imágenes, volúmenes, contenedores)
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerdPaso 5: Eliminar el repositorio y la clave GPG de Docker
sudo rm /etc/apt/sources.list.d/docker.list
sudo rm /etc/apt/keyrings/docker.ascPaso 6: Eliminar el grupo docker y el usuario del grupo
sudo groupdel dockerSi agregaste tu usuario al grupo con
sudo usermod -aG docker $USER, al borrar el grupo ya no perteneces a él. No hace falta hacer nada más.
Paso 7: Actualizar el índice de paquetes
sudo apt updatePaso 8: Verificar que Docker ya no está
docker --versionDebería decir algo como:
bash: docker: command not found✅ Docker quedó completamente desinstalado.
🧾 Resumen rápido
Solo limpiar el proyecto (dejar Docker instalado)
docker rm -f mi-web mi-web-apache 2>/dev/null
cd ..
rm -rf mi-web-docker
# Opcional: docker rmi nginx:latestDesinstalar Docker por completo (Ubuntu/Debian)
sudo systemctl stop docker docker.socket containerd
sudo apt purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo apt autoremove -y
sudo rm -rf /var/lib/docker /var/lib/containerd
sudo rm /etc/apt/sources.list.d/docker.list /etc/apt/keyrings/docker.asc
sudo groupdel docker
sudo apt update⚠️ Notas importantes
La carpeta
mi-web-dockersolo contieneindex.html. Si lo creaste conecho, no hay nada más. Bórrala sin miedo.El contenedor
mi-webno guarda datos persistentes porque usaba un bind mount (-v $(pwd):/usr/share/nginx/html), no un volumen de Docker. Al borrar la carpeta del host, desaparece todo.Si usaste
--rmal hacerdocker run, el contenedor ya se habría eliminado solo al detenerse. En ese casodocker rm mi-webdará error "No such container"; ignóralo.Si borras Docker, perderás todas las imágenes, contenedores y volúmenes de todos tus proyectos, no solo los de este tutorial. Asegúrate de no necesitarlos.
La clave GPG que borras en
/etc/apt/keyrings/docker.asces la que usaste en la instalación. Si algún día reinstalas Docker, tendrás que repetir el proceso desde el inicio.
Comentarios
Publicar un comentario