
Introducción a Docker: Aprende a contenerizar tus aplicaciones paso a paso
El desarrollo moderno de software ha evolucionado hacia entornos más ágiles, portables y reproducibles. En este contexto, Docker se ha consolidado como una de las herramientas fundamentales para contenerizar aplicaciones, facilitando su despliegue y ejecución en cualquier entorno sin conflictos de dependencias.
A través de esta guía, aprenderás paso a paso cómo usar Docker para contenerizar tus proyectos, ejecutar contenedores, trabajar con imágenes personalizadas y gestionar entornos de desarrollo y producción de forma eficiente. No necesitas conocimientos previos avanzados: este recorrido está pensado para acompañarte desde los conceptos básicos hasta las prácticas más comunes del día a día con Docker.
Ya sea que quieras mejorar tus flujos de trabajo, preparar tu aplicación para un entorno de producción o simplemente explorar cómo funciona la tecnología que impulsa buena parte de la infraestructura actual en la nube, esta guía es para ti.
Qué es Docker y por qué se ha vuelto tan popular
Docker es una plataforma de código abierto que permite empaquetar aplicaciones y todas sus dependencias en contenedores ligeros, portables y consistentes. Estos contenedores pueden ejecutarse en cualquier sistema que tenga el motor de Docker instalado, sin importar el sistema operativo subyacente ni la configuración del host.
A diferencia de las máquinas virtuales tradicionales, Docker no necesita un sistema operativo completo por cada instancia. En lugar de eso, utiliza el kernel del sistema operativo anfitrión y aísla procesos en entornos separados, lo que reduce significativamente el consumo de recursos y acelera los tiempos de ejecución.
Entre las razones que explican su popularidad:
- Portabilidad: puedes desarrollar en tu equipo, probar en staging y desplegar en producción con la misma imagen.
- Rapidez: los contenedores se crean y se destruyen en segundos.
- Aislamiento: cada aplicación funciona en su propio entorno, evitando conflictos entre dependencias o librerías.
- Escalabilidad: se integra fácilmente con sistemas de orquestación como Kubernetes para escalar aplicaciones automáticamente.
- Integración continua: Docker se adapta muy bien a flujos DevOps modernos y herramientas como Jenkins, GitHub Actions o GitLab CI/CD.
Docker ha redefinido el desarrollo multiplataforma, eliminando el clásico “en mi máquina funciona”.
Instalación y primeros pasos con Docker
Para comenzar a usar Docker en tu entorno local, lo primero es instalar el motor de Docker (Docker Engine) en tu sistema operativo. Docker está disponible para Windows, macOS y distribuciones Linux como Ubuntu, Fedora o Debian.
Aunque puedes encontrar paquetes específicos para cada sistema, la forma más sencilla de empezar es a través de Docker Desktop, que incluye tanto Docker Engine como herramientas gráficas y de línea de comandos útiles para gestionar contenedores.
Instalación básica según tu sistema operativo
- Windows y macOS: descarga Docker Desktop desde el sitio oficial. La instalación es asistida, pero es necesario habilitar la virtualización en BIOS/UEFI.
- Linux (Ubuntu): puedes instalar Docker desde los repositorios oficiales con unos pocos comandos.
sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
Una vez instalado, puedes comprobar que Docker está funcionando ejecutando:
docker --version
Esto debería devolver la versión instalada del motor de Docker y confirmar que está operativo.
Primer contenedor: el clásico “Hello World”
Para verificar que todo funciona correctamente, puedes ejecutar tu primer contenedor con:
docker run hello-world
Docker descargará automáticamente una imagen de prueba, la ejecutará y mostrará un mensaje de bienvenida. Si ves el mensaje en consola, significa que tu entorno está listo para contenerizar aplicaciones.
Conceptos clave: imágenes, contenedores y Dockerfile
Para trabajar eficazmente con Docker, es fundamental comprender sus tres pilares básicos: imágenes, contenedores y el archivo Dockerfile. Estos conceptos forman la base sobre la que se construyen y despliegan las aplicaciones contenerizadas.
Una imagen de Docker es un paquete inmutable que contiene todo lo necesario para ejecutar una aplicación: código fuente, dependencias, librerías y configuraciones del sistema. Las imágenes son la plantilla a partir de la cual se crean los contenedores.
Un contenedor es una instancia en ejecución de una imagen. Es un entorno aislado que ejecuta una aplicación o proceso tal como fue definido en la imagen. Puedes tener múltiples contenedores corriendo desde una misma imagen, cada uno funcionando de forma independiente.
Por último, el Dockerfile es un archivo de texto que define cómo se construye una imagen. En él se especifican las instrucciones necesarias para crear el entorno deseado, como qué base utilizar, qué dependencias instalar y qué comandos ejecutar durante la construcción de la imagen.
Ciclo básico de trabajo con Docker
El flujo de trabajo habitual con Docker implica los siguientes pasos:
- Escribir un Dockerfile que describa tu aplicación y su entorno.
- Construir una imagen con docker build a partir de ese Dockerfile.
- Crear y ejecutar contenedores desde esa imagen con docker run.
- Administrar contenedores e imágenes con comandos como docker ps, docker stop, docker rm y docker rmi.
Estos conceptos te permitirán comenzar a contenerizar tus propias aplicaciones y desplegarlas de forma eficiente y portátil.
Instalación de Docker en tu sistema
Antes de comenzar a trabajar con contenedores, es necesario instalar Docker en tu sistema. El proceso es relativamente sencillo y está bien documentado para los principales sistemas operativos. A continuación se indican los pasos generales para cada plataforma, aunque se recomienda seguir siempre la guía oficial más actualizada.
Instalación en Windows y macOS
Docker se instala en sistemas Windows y macOS a través de Docker Desktop, una solución todo en uno que incluye el motor de Docker, Docker CLI y una interfaz gráfica útil para desarrolladores.
Para comenzar:
- Accede a Docker Desktop y descarga la versión correspondiente a tu sistema operativo.
- Ejecuta el instalador y sigue los pasos del asistente.
- Tras la instalación, Docker se ejecutará automáticamente y estará disponible desde tu terminal.
Puedes comprobar que la instalación fue exitosa verificando la versión instalada:
docker --version
También puedes ejecutar un contenedor de prueba para asegurarte de que todo funciona correctamente:
docker run hello-world
Instalación en Linux
En sistemas Linux, Docker se instala utilizando el gestor de paquetes de la distribución correspondiente. A continuación, se muestra un ejemplo para distribuciones basadas en Debian/Ubuntu.
Pasos recomendados:
- Abre una terminal y actualiza los paquetes del sistema.
- Instala el paquete docker.io, que incluye el motor de Docker.
- Habilita y arranca el servicio de Docker.
- Añade tu usuario al grupo docker para evitar el uso de sudo en cada comando.
sudo apt update
sudo apt install docker.io
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker $USER
Después de la instalación, verifica que Docker esté funcionando correctamente:
docker run hello-world
Esto ejecutará una imagen de prueba que imprimirá un mensaje de bienvenida si todo está correctamente configurado.
Tu primer contenedor con Docker
Una vez que Docker está instalado correctamente, el siguiente paso es lanzar tu primer contenedor. Esto te permitirá verificar que la instalación funciona y empezar a familiarizarte con los comandos básicos.
Ejecutar un contenedor de prueba
Docker permite ejecutar contenedores a partir de imágenes preconfiguradas disponibles en Docker Hub, el repositorio oficial de imágenes. Para realizar una prueba inicial, puedes usar la imagen hello-world:
docker run hello-world
Este comando descarga la imagen hello-world (si aún no está en tu sistema) y ejecuta un contenedor que muestra un mensaje de bienvenida. Es una forma sencilla y rápida de confirmar que Docker está operativo en tu entorno.
Ver y gestionar los contenedores
Después de ejecutar el contenedor de prueba, puedes consultar la lista de contenedores activos y finalizados usando:
docker ps -a
Este comando muestra todos los contenedores, tanto los que están en ejecución como los que ya se han detenido. Si deseas liberar espacio eliminando los contenedores detenidos, puedes hacerlo con:
docker container prune
Este comando elimina todos los contenedores detenidos, lo que ayuda a mantener limpio tu entorno de trabajo.
Configurar el entorno de desarrollo para Docker
Configurar el entorno de desarrollo para Docker
Antes de comenzar a trabajar con Docker, es fundamental preparar correctamente el entorno de desarrollo. Esto implica instalar Docker en tu sistema operativo, verificar que todo funcione correctamente y familiarizarte con las herramientas básicas incluidas. A continuación te guiamos paso a paso para dejarlo todo listo.
Instalar Docker en tu sistema operativo
Docker ofrece instaladores para Windows, macOS y varias distribuciones de Linux. Para una experiencia completa, se recomienda instalar Docker Desktop, que incluye tanto el motor de Docker como una interfaz gráfica y otras herramientas útiles como Docker Compose.
Ve a la web oficial de Docker Desktop y descarga la versión correspondiente a tu sistema operativo.
Tras completar la instalación, abre una terminal o consola de comandos y ejecuta una instrucción básica para asegurarte de que Docker se encuentra disponible:
# Verificar que Docker está funcionando
docker --version
Si todo está bien configurado, verás un mensaje de bienvenida de Docker confirmando que está funcionando.
Verificar versión y configuración básica
Una vez instalado Docker, conviene verificar la versión instalada y revisar algunos parámetros básicos. Esto no solo te asegurará que la instalación fue correcta, sino que también te servirá para comprobar compatibilidad con otras herramientas o proyectos futuros.
# Ver la versión instalada
docker version
También puedes consultar información del sistema con:
# Consultar configuración del sistema
docker info
Con estas comprobaciones iniciales completas, ya estarás listo para comenzar a contenerizar tus primeras aplicaciones.
Crear tu primer contenedor con Docker
Ahora que tienes Docker instalado, es momento de ejecutar tu primer contenedor. Un contenedor es una instancia aislada de una imagen que contiene todo lo necesario para ejecutar una aplicación. Para este ejemplo, utilizaremos una imagen oficial de prueba que te permitirá ver Docker en acción rápidamente.
Ejecutar un contenedor desde una imagen
Vamos a usar la imagen hello-world, que está diseñada específicamente para probar que Docker funciona correctamente. Abre la terminal y ejecuta el siguiente comando:
# Ejecutar imagen hello-world
docker run hello-world
Docker buscará la imagen localmente y, si no la encuentra, la descargará desde Docker Hub. Luego ejecutará el contenedor y te mostrará un mensaje de confirmación en pantalla.
Listar los contenedores creados
Después de ejecutar una imagen, puedes comprobar los contenedores que se han creado (aunque ya estén detenidos) con este comando:
# Ver lista de contenedores (incluso detenidos)
docker ps -a
Este listado te mostrará el ID del contenedor, su estado, nombre y otra información útil.
Eliminar un contenedor
Si quieres eliminar un contenedor que ya no necesitas, puedes hacerlo con el siguiente comando, reemplazando ID_DEL_CONTENEDOR por el ID correspondiente:
# Eliminar un contenedor por ID
docker rm ID_DEL_CONTENEDOR
Buscar e instalar imágenes desde Docker Hub
Docker Hub es el repositorio oficial de imágenes Docker, donde puedes encontrar aplicaciones listas para usar. Desde allí puedes buscar imágenes de bases de datos, lenguajes de programación, herramientas de desarrollo, y mucho más.
Buscar imágenes disponibles
Para buscar una imagen desde la terminal, puedes usar el comando docker search seguido del nombre de la imagen que te interesa. Por ejemplo, para buscar imágenes relacionadas con Node.js:
docker search node
Esto mostrará un listado con el nombre, descripción y número de descargas de las imágenes disponibles.
Descargar una imagen
Una vez localizada una imagen que quieres usar, puedes descargarla a tu sistema local con el comando docker pull. Por ejemplo:
docker pull node
Esto descargará la última versión disponible de esa imagen en tu equipo, lista para ejecutarse.
Ejecutar contenedores desde una imagen
Una vez descargada una imagen, puedes crear y ejecutar un contenedor basado en ella usando el comando docker run. Este comando crea una instancia activa de la imagen, es decir, un contenedor que se ejecuta de forma aislada con todos los recursos definidos en dicha imagen.
Ejecutar un contenedor interactivo
Para iniciar un contenedor en modo interactivo (por ejemplo, acceder a una terminal de bash dentro del contenedor), puedes usar el siguiente comando:
docker run -it ubuntu bash
Esto abrirá una terminal dentro del contenedor ubuntu y te permitirá ejecutar comandos como si estuvieras dentro de un sistema operativo separado.
Ejecutar un contenedor en segundo plano
Si no necesitas una terminal interactiva, puedes ejecutar el contenedor en segundo plano (modo detached) usando el flag -d:
docker run -d nginx
Esto iniciará el contenedor con nginx y lo dejará ejecutándose en segundo plano.
Gestionar contenedores activos
Una vez que tienes contenedores en ejecución, es fundamental poder gestionarlos: ver cuáles están activos, detenerlos, reiniciarlos o eliminarlos. Docker proporciona varios comandos para estas tareas básicas de administración.
Listar contenedores en ejecución
Para ver los contenedores que están actualmente activos en tu sistema, puedes usar:
docker ps
Si quieres ver todos los contenedores (incluidos los detenidos), añade el flag -a:
docker ps -a
Detener y eliminar contenedores
Para detener un contenedor en ejecución necesitas su ID o nombre. Luego puedes eliminarlo si lo deseas.
docker stop nombre_o_id && docker rm nombre_o_id
Esto detiene el contenedor indicado y lo elimina posteriormente.
También puedes eliminar todos los contenedores detenidos con un solo comando:
docker container prune
Crear imágenes personalizadas con Dockerfile
Uno de los aspectos más potentes de Docker es la posibilidad de crear imágenes adaptadas a tus propias necesidades. Para ello se utiliza un archivo llamado Dockerfile, que define paso a paso cómo construir dicha imagen a partir de una base oficial y tus propios requisitos.
Qué es un Dockerfile
Un Dockerfile es un archivo de texto plano que define una imagen personalizada a partir de otra existente (por ejemplo, python, node, etc.) e incluye todos los pasos necesarios para configurar el entorno de tu aplicación: instalación de dependencias, copiado de archivos, comandos de arranque, etc.
A continuación se muestra un ejemplo básico de Dockerfile:
# Dockerfile básico para una app Python
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "main.py"]
Construir la imagen desde el Dockerfile
Una vez creado tu Dockerfile, puedes construir la imagen personalizada con:
docker build -t mi_aplicacion .
Esto genera una imagen con el nombre que especifiques (mi_aplicacion en este caso) y podrás usarla para crear contenedores basados en ella.
Ejecutar y probar contenedores personalizados
Tras crear tu imagen personalizada con el Dockerfile, puedes ejecutar un contenedor basado en ella para validar que todo funcione como esperas.
Lanzar un contenedor con tu imagen
Puedes iniciar un contenedor usando el comando docker run y especificando el nombre de la imagen que creaste. Además, puedes añadir opciones como -it para modo interactivo, --rm para eliminar el contenedor al salir, y -p para mapear puertos si tu aplicación expone un servicio web.
docker run -it --rm mi_aplicacion
Verificar el funcionamiento y depurar
Si tu contenedor se ejecuta correctamente, deberías ver la salida esperada (por ejemplo, logs de tu aplicación). En caso de errores, puedes revisar los logs con:
docker logs <nombre_o_id_del_contenedor>
O incluso entrar dentro del contenedor en ejecución con:
docker exec -it <nombre_o_id_del_contenedor> /bin/bash
Esto te permitirá diagnosticar y depurar problemas directamente desde el entorno del contenedor.
Compartir imágenes con Docker Hub
Una vez que tu imagen personalizada está lista y funcionando, puedes compartirla con otros desarrolladores o equipos publicándola en un registro de contenedores. Docker Hub es el más popular y permite almacenar, versionar y distribuir imágenes de forma sencilla y centralizada.
Iniciar sesión en Docker Hub desde la terminal
Antes de subir una imagen, debes iniciar sesión con tu cuenta de Docker Hub utilizando el comando docker login. Si no tienes una cuenta, puedes crear una gratuitamente en hub.docker.com.
docker login
Etiquetar la imagen para su publicación
Docker requiere que las imágenes estén correctamente etiquetadas para su subida. La etiqueta debe incluir tu nombre de usuario en Docker Hub y el nombre del repositorio. Para ello, usa el siguiente comando:
docker tag mi_aplicacion usuario_dockerhub/mi_aplicacion
Subir la imagen al repositorio
Una vez etiquetada, puedes subir tu imagen con el comando docker push. Esto la dejará disponible para otros usuarios (públicamente o en modo privado, según tu configuración):
docker push usuario_dockerhub/mi_aplicacion
Eliminar contenedores e imágenes no utilizados
A medida que trabajas con Docker, es habitual que se acumulen contenedores detenidos, imágenes antiguas y redes sin uso. Para evitar el consumo innecesario de espacio y recursos, Docker ofrece comandos de limpieza seguros y eficientes.
Limpiar contenedores detenidos
Para eliminar contenedores que ya no están en ejecución, puedes usar el comando docker container prune. Este comando te pedirá confirmación antes de borrar los contenedores detenidos:
docker container prune
Eliminar imágenes que no se utilizan
Para liberar espacio en disco, puedes borrar imágenes que ya no estén en uso por ningún contenedor mediante el comando docker image prune. También puedes eliminar todas las imágenes no referenciadas con una opción adicional:
docker image prune -a
Limpieza completa del sistema
Si deseas hacer una limpieza general que incluya contenedores, imágenes, redes y volúmenes no utilizados, puedes ejecutar este comando (requiere confirmación):
docker system prune -a
Usar volúmenes para persistencia de datos
Por defecto, los datos generados dentro de un contenedor se eliminan al destruirlo. Para evitar perder información importante, Docker permite usar volúmenes: espacios de almacenamiento persistente que sobreviven al ciclo de vida de los contenedores y pueden reutilizarse fácilmente.
Crear y asociar un volumen
Puedes crear un volumen con el comando docker volume create y luego montarlo en un contenedor usando la opción -v. Esto permite que los datos escritos en una ruta específica dentro del contenedor se guarden en el volumen:
docker volume create datos_app
docker run -d -v datos_app:/app/data --name app_con_datos mi_aplicacion
Ver y gestionar volúmenes existentes
Docker permite listar los volúmenes creados, inspeccionarlos o eliminarlos si ya no se necesitan. Esto te da control sobre los recursos persistentes de tu aplicación:
docker volume ls
docker volume inspect datos_app
docker volume rm datos_app
Construir una imagen personalizada con Dockerfile
Una de las mayores ventajas de Docker es definir el entorno de tu aplicación mediante un archivo Dockerfile. Este archivo describe paso a paso cómo construir una imagen personalizada que incluya código, dependencias, variables y configuración.
Crear un Dockerfile paso a paso
Un Dockerfile comienza especificando una imagen base y luego incluye instrucciones para copiar archivos, instalar dependencias y definir comandos de inicio. A continuación, un ejemplo básico para una aplicación Node.js:
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
Este archivo debe guardarse en la raíz del proyecto. Luego puedes construir la imagen ejecutando el siguiente comando en la terminal:
docker build -t mi_app_personalizada .
Ejecutar un contenedor desde tu imagen
Una vez construida la imagen, puedes lanzar un contenedor a partir de ella como harías con cualquier otra imagen:
docker run -p 3000:3000 mi_app_personalizada
Compartir imágenes con Docker Hub
Compartir tus imágenes personalizadas es sencillo con Docker Hub, el repositorio público más popular. Solo necesitas tener una cuenta activa, etiquetar la imagen correctamente e iniciar sesión desde la terminal para publicarla.
Subir una imagen a Docker Hub
Primero, etiqueta la imagen con tu nombre de usuario de Docker Hub para que pueda ser reconocida al subirla:
docker tag mi_app_personalizada rafa/docker-miapp
Luego inicia sesión desde la terminal:
docker login
Por último, sube la imagen al repositorio:
docker push rafa/docker-miapp
Una vez subida, cualquier persona con acceso podrá descargarla usando el comando docker pull.
Descargar y ejecutar imágenes desde Docker Hub
Docker Hub no solo permite compartir imágenes propias, también es la fuente principal para obtener imágenes oficiales de aplicaciones populares como NGINX, PostgreSQL o Node.js. Puedes buscar cualquier imagen en https://hub.docker.com y ejecutarla directamente desde la terminal.
Descargar y ejecutar una imagen pública
Para descargar una imagen basta con usar el comando docker pull seguido del nombre de la imagen:
docker pull nginx
Una vez descargada, puedes ejecutarla como cualquier otra imagen local:
docker run -d -p 8080:80 nginx
Este mecanismo te permite poner en marcha servicios completos en segundos, sin necesidad de instalar nada más que Docker.
Conclusiones
Contenerizar aplicaciones con Docker se ha convertido en una práctica esencial para el desarrollo moderno, permitiendo crear entornos consistentes, fácilmente replicables y portables entre sistemas. A lo largo de esta guía hemos recorrido los conceptos fundamentales de Docker, desde su instalación y primeros comandos hasta la creación de imágenes personalizadas y el uso de Docker Hub.
La principal ventaja de Docker reside en su capacidad para encapsular una aplicación con todas sus dependencias, eliminando los clásicos problemas de "en mi máquina funciona". Además, su integración con herramientas de automatización y despliegue continuo lo convierte en una pieza clave en arquitecturas DevOps.
Dominar Docker es un paso clave para cualquier profesional del desarrollo o la administración de sistemas. Gracias a su flexibilidad, puedes contenerizar aplicaciones completas, replicarlas en distintos entornos y automatizar su despliegue con facilidad. Empieza poco a poco, practica cada comando y pronto integrarás Docker en tu flujo de trabajo diario.
Artículos relacionados

Introducción a Godot: el motor de videojuegos gratuito y fácil de usar
Godot es un motor de desarrollo de videojuegos gratuito, de código abierto y con una comunidad muy activa que impulsa su evolución constante.

Introducción a la ciberseguridad: guía básica
En la era digital, donde la mayoría de nuestras actividades se realizan de forma online, proteger nuestra información se ha convertido en una necesidad primordial.&nb

Flutter para principiantes: un lenguaje multiplataforma top
En la era digital, la innovación constante redefine nuestra manera de interactuar con el mundo. Las aplicaciones móviles,