Docker se ha convertido en una de las herramientas esenciales en el desarrollo y despliegue de aplicaciones modernas. Su capacidad para crear entornos aislados y consistentes permite a los desarrolladores trabajar sin preocuparse por los problemas típicos de configuración entre distintos sistemas.
En esta guía vas a aprender, paso a paso y con lujo de detalles, cómo crear un contenedor Docker desde cero. Veremos desde la instalación básica hasta la ejecución avanzada usando Docker Compose, pasando por la creación de imágenes personalizadas, el uso de volúmenes, la gestión de contenedores en ejecución y las mejores prácticas para optimizar tu entorno de trabajo.
¿Qué es un contenedor Docker y por qué usarlo?
Un contenedor Docker es una unidad ligera y portátil que contiene una aplicación junto con todas sus dependencias. A diferencia de una máquina virtual, que incluye un sistema operativo completo, los contenedores comparten el núcleo del sistema operativo del host, lo que los hace mucho más rápidos y eficientes.
Gracias a Docker, puedes desarrollar, probar y desplegar tu aplicación en distintos entornos sin preocuparte de las diferencias entre ellos. Esta característica lo convierte en una solución ideal tanto para entornos de producción como para pruebas y desarrollo local.
Requisitos previos para usar Docker
- Sistema operativo compatible: Ubuntu, Debian, Fedora, CentOS, macOS o Windows.
- Acceso a privilegios de superusuario (root o sudo) para instalar y ejecutar Docker.
- Conexión a Internet para descargar imágenes oficiales desde Docker Hub.
Instalación de Docker
Instalar Docker es normalmente sencillo. En Ubuntu, puedes instalarlo con estos comandos:
sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io
Para que Docker se inicie automáticamente al encender el sistema, puedes ejecutarlo así:
sudo systemctl enable docker sudo systemctl enable containerd
Verificando la instalación
Una vez instalado, puedes verificar que Docker está operativo ejecutando este comando:
docker run hello-world
Este comando descargará una imagen de prueba y mostrará un mensaje confirmando que todo funciona correctamente.
Creación de un contenedor: conceptos básicos
Para crear un contenedor necesitas una imagen Docker, que es un paquete con todos los componentes que necesita tu aplicación. Las imágenes pueden descargarse desde Docker Hub o crearse manualmente.
Por ejemplo, para levantar un servidor Nginx básico puedes usar:
docker run --name miweb -p 8080:80 -d nginx
Con esta instrucción:
- –name miweb: le da un nombre al contenedor.
- -p 8080:80: redirige el puerto 8080 del host al puerto 80 del contenedor.
- -d: ejecuta el contenedor en segundo plano.
Creando imágenes personalizadas con Dockerfile
Un Dockerfile te permite construir imágenes personalizadas paso a paso. Cada instrucción en el archivo añade una nueva capa a la imagen final. Aquí tienes un ejemplo sencillo:
FROM ubuntu:latest WORKDIR /app COPY . . RUN apt-get update && apt-get install -y curl CMD
Este archivo hace lo siguiente:
- FROM: usa la última versión de Ubuntu como base.
- WORKDIR: establece el directorio de trabajo.
- COPY: copia los archivos del host al contenedor.
- RUN: instala el paquete curl.
- CMD: define el comando por defecto cuando se ejecuta el contenedor.
Para construir la imagen con este Dockerfile, puedes consultar la guía en crear imágenes personalizadas con Dockerfile.
Ejecutar un contenedor desde una imagen propia
Una vez construida la imagen, puedes lanzar tu aplicación con:
docker run --name ejemplo -p 8080:80 miproyecto
Así levantas un contenedor a partir de la imagen que acabas de crear.
Gestión de contenedores Docker
Docker proporciona varios comandos para gestionar tus contenedores. Algunos de los más útiles incluyen:
docker ps
: lista los contenedores en ejecución.docker ps -a
: muestra todos los contenedores, incluidos los detenidos.docker stop nombre_contenedor
: detiene un contenedor.docker rm nombre_contenedor
: elimina un contenedor.
Persistencia de datos: volúmenes en Docker
Por defecto, los datos almacenados dentro de un contenedor se pierden al eliminarlo. Para mantener datos persistentes, es imprescindible montar volúmenes. La utilización de volúmenes asegura que los datos sobrevivan a la eliminación del contenedor y puedan ser compartidos entre ellos.
Ejemplo con volumen tipo bind:
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=clave -v $PWD/data:/var/lib/mysql mysql:8.0
También puedes usar volúmenes gestionados por Docker:
docker volume create mysql_data docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=clave -v mysql_data:/var/lib/mysql mysql:8.0
Variables de entorno
Docker permite configurar variables de entorno que ayudan a parametrizar el comportamiento de los contenedores. Por ejemplo:
docker run -e MYSQL_ROOT_PASSWORD=admin -e MYSQL_DATABASE=tienda mysql:8.0
Asignación de recursos
Puedes limitar el uso de CPU y memoria por parte de un contenedor. Esto es útil para evitar que uno solo consuma todos los recursos del sistema:
docker run --cpus=0.5 --memory=512m miimagen
Orquestación básica con Docker Compose
Docker Compose simplifica la gestión de múltiples contenedores. Define todos los servicios necesarios en un archivo YAML y luego los ejecuta con un simple comando. Para aprender más sobre cómo crear contenedores en Docker utilizando Docker Compose, consulta usar Docker Compose.
Ejemplo de docker-compose.yml básico para MySQL:
version: '3' services: mysql: image: mysql:8.0 ports: - 3306:3306 environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=proyecto - MYSQL_USER=usuario - MYSQL_PASSWORD=clave volumes: - mysql_data:/var/lib/mysql volumes: mysql_data:
Para levantar los servicios:
docker-compose up -d
Buenas prácticas al usar Docker
Para que tus imágenes y contenedores sean eficientes, seguros y fáciles de mantener, sigue estas recomendaciones:
- Usa imágenes oficiales siempre que sea posible, ya que están auditadas y optimizadas.
- Mantén tus contenedores ligeros utilizando imágenes base pequeñas y eliminando archivos innecesarios tras la instalación de paquetes.
- No ejecutes procesos como root, crea un usuario específico dentro del contenedor.
- Usa volúmenes para guardar datos persistentes y evitar pérdidas ante fallos o actualizaciones.
- Configura variables sensibles como secretos mediante entornos o archivos .env, para prevenir su exposición en el código fuente.
Ejemplo práctico: desplegar Pandora FMS con Docker
Una aplicación real con varios contenedores es Pandora FMS. Podemos desplegar tanto el servidor como la base de datos con apenas dos comandos si usamos Docker.
Primero, levantamos la base de datos:
docker run --name Pandora_DB -p 3306:3306 -e MYSQL_ROOT_PASSWORD=pandora -e MYSQL_DATABASE=pandora -e MYSQL_USER=pandora -e MYSQL_PASSWORD=pandora -v mysqlvol:/var/lib/mysql -d rameijeiras/pandorafms-percona-base
Después se levanta el servidor de aplicación apuntando a la IP del host:
docker run --name Pandora_app --rm -p 8081:80 -e DBHOST=127.0.0.1 -e DBNAME=pandora -e DBUSER=pandora -e DBPASS=pandora -e DBPORT=3306 -ti rameijeiras/pandorafms-community:740
Con esto ya tendrías una instancia funcional de Pandora FMS en cuestión de minutos.
Docker es una herramienta versátil que transforma la forma en que se despliegan y gestionan aplicaciones. Desde levantar contenedores sencillos para desarrollo hasta entornos complejos con múltiples servicios, su uso mejora la eficiencia, reduce problemas de compatibilidad y facilita la escalabilidad de tus proyectos. Dominar Docker es una inversión que puede marcar la diferencia en la gestión de tus despliegues y desarrollo de aplicaciones.
Redactor apasionado del mundo de los bytes y la tecnología en general. Me encanta compartir mis conocimientos a través de la escritura, y eso es lo que haré en este blog, mostrarte todo lo más interesante sobre gadgets, software, hardware, tendencias tecnológicas, y más. Mi objetivo es ayudarte a navegar por el mundo digital de forma sencilla y entretenida.