Introducción
Este tutorial te guiará a través del proceso de creación de una imagen Docker personalizada utilizando un Dockerfile, la implementación y la gestión de aplicaciones Docker. Aprenderás el comando para construir una imagen Docker a partir de un Dockerfile personalizado, lo que te permitirá optimizar tu flujo de trabajo de contenedorización e implementar aplicaciones de forma más eficiente.
Introducción a los Contenedores Docker
Docker es una plataforma de código abierto popular que permite a los desarrolladores construir, implementar y ejecutar aplicaciones en un entorno de contenedorización. Los contenedores son paquetes de software ligeros, autónomos y ejecutables que incluyen todo lo necesario para ejecutar una aplicación, incluyendo el código, el tiempo de ejecución, las herramientas del sistema y las bibliotecas.
¿Qué es Docker?
Docker es una herramienta diseñada para facilitar la creación, implementación y ejecución de aplicaciones mediante el uso de contenedores. Los contenedores permiten a un desarrollador empaquetar una aplicación con todas las partes que necesita, como bibliotecas y otras dependencias, y enviarla como un solo paquete.
Beneficios de los Contenedores Docker
- Portabilidad: Los contenedores Docker pueden ejecutarse de forma consistente en cualquier entorno, desde la máquina local de un desarrollador hasta servidores de producción, asegurando que la aplicación se comporte de la misma manera independientemente de la infraestructura subyacente.
- Escalabilidad: Docker facilita la ampliación o reducción de las aplicaciones según sea necesario, agregando o eliminando contenedores.
- Eficiencia: Los contenedores Docker son ligeros y comparten el kernel del sistema operativo host, lo que los hace más eficientes que las máquinas virtuales tradicionales.
- Consistencia: Docker garantiza que la aplicación se ejecutará de la misma manera, desde el desarrollo hasta la producción, eliminando el problema de "funciona en mi máquina".
Arquitectura de Docker
Docker utiliza una arquitectura cliente-servidor, donde el cliente Docker se comunica con el demonio Docker, que es responsable de la construcción, ejecución y distribución de los contenedores Docker.
graph LD
subgraph Arquitectura de Docker
client[Cliente Docker]
daemon[Demonio Docker]
client -- API --> daemon
daemon -- Imágenes --> registry[Registro Docker]
end
Contenedores Docker vs. Máquinas Virtuales
Si bien tanto los contenedores como las máquinas virtuales (VM) sirven para ejecutar aplicaciones en entornos aislados, existen algunas diferencias clave:
| Característica | Contenedores Docker | Máquinas Virtuales |
|---|---|---|
| Aislamiento | Los contenedores comparten el kernel del sistema operativo host, proporcionando un aislamiento más ligero. | Las máquinas virtuales tienen su propio sistema operativo completo, proporcionando un aislamiento más fuerte. |
| Uso de recursos | Los contenedores son más eficientes, ya que comparten los recursos del host y no necesitan ejecutar un sistema operativo completo. | Las máquinas virtuales requieren más recursos, ya que cada máquina virtual tiene su propio sistema operativo. |
| Tiempo de inicio | Los contenedores pueden iniciarse en segundos, ya que no necesitan iniciar un sistema operativo completo. | Las máquinas virtuales pueden tardar minutos en iniciarse, ya que necesitan iniciar todo el sistema operativo. |
Primeros pasos con Docker
Para comenzar con Docker, necesitarás instalar el motor Docker en tu sistema. Puedes descargar e instalar Docker desde el sitio web oficial de Docker (https://www.docker.com/get-started). Una vez instalado, puedes comenzar a usar Docker para construir, implementar y ejecutar tus aplicaciones.
Creación de una Imagen Docker Personalizada
La creación de una imagen Docker personalizada es el proceso de construir una nueva imagen basada en una imagen base existente y luego agregar sus propias personalizaciones, como código de aplicación, dependencias y configuraciones.
Dockerfile
Un Dockerfile es un archivo de texto que contiene todas las instrucciones necesarias para construir una imagen Docker. Especifica la imagen base, los pasos a ejecutar durante el proceso de construcción y la configuración final de la imagen.
Aquí hay un ejemplo de Dockerfile:
## Usar la imagen base oficial de Ubuntu 22.04
FROM ubuntu:22.04
## Actualizar el índice de paquetes e instalar los paquetes necesarios
RUN apt-get update && apt-get install -y \
git \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
## Establecer el directorio de trabajo
WORKDIR /app
## Copiar el código de la aplicación
COPY . /app
## Instalar las dependencias de Python
RUN pip3 install --no-cache-dir -r requirements.txt
## Exponer el puerto en el que se ejecutará la aplicación
EXPOSE 8080
## Establecer el comando para ejecutar la aplicación
CMD ["python3", "app.py"]
Construcción de una Imagen Personalizada
Para construir una imagen Docker personalizada utilizando el Dockerfile, sigue estos pasos:
Crea un Dockerfile en el directorio de tu proyecto.
Abre una terminal y navega al directorio del proyecto.
Ejecuta el siguiente comando para construir la imagen:
docker build -t my-custom-image .Este comando construirá una nueva imagen Docker con el nombre "my-custom-image" utilizando las instrucciones del Dockerfile.
Publicación de la Imagen en un Registro
Una vez que hayas construido tu imagen Docker personalizada, puedes publicarla en un registro Docker, como Docker Hub o un registro privado, para que pueda compartirse e implementarse en otros sistemas.
Inicia sesión en el registro Docker:
docker loginEtiqueta la imagen con la URL del registro y tu nombre de usuario:
docker tag my-custom-image username/my-custom-image:latestPublica la imagen en el registro:
docker push username/my-custom-image:latest
Ahora, tu imagen Docker personalizada está disponible en el registro y puede ser extraída y utilizada por otros desarrolladores o implementada en entornos de producción.
Implementación y Administración de Aplicaciones Docker
Una vez creada la imagen Docker personalizada, puedes implementar y administrar tus aplicaciones basadas en Docker. Esta sección cubrirá los conceptos clave y los pasos involucrados en la implementación y administración de aplicaciones Docker.
Implementación de Contenedores Docker
Para implementar un contenedor Docker, puedes usar el comando docker run. Este comando inicia un nuevo contenedor basado en una imagen especificada y te permite configurar diversas opciones, como el mapeo de puertos, variables de entorno y montajes de volumen.
Aquí hay un ejemplo de la ejecución de un contenedor basado en la imagen "my-custom-image":
docker run -d -p 8080:8080 -e DB_HOST=192.168.1.100 -v /data:/app/data my-custom-image
Este comando:
- Ejecuta el contenedor en modo desacoplado (
-d) - Mapea el puerto 8080 del contenedor al puerto 8080 del host (
-p 8080:8080) - Define una variable de entorno
DB_HOSTcon el valor192.168.1.100(-e DB_HOST=192.168.1.100) - Monta el directorio del host
/dataen el directorio/app/datadel contenedor (-v /data:/app/data) - Utiliza la imagen "my-custom-image" para iniciar el contenedor.
Administración de Contenedores Docker
Docker proporciona varios comandos para administrar contenedores en ejecución:
docker ps: Lista todos los contenedores en ejecución.docker stop <container_id>: Deten un contenedor en ejecución.docker start <container_id>: Inicia un contenedor detenido.docker logs <container_id>: Muestra los registros de un contenedor.docker exec -it <container_id> /bin/bash: Accede al shell de un contenedor en ejecución.
Docker Compose
Docker Compose es una herramienta que te permite definir y administrar aplicaciones Docker multicontenedor. Utiliza un archivo YAML para configurar los servicios, redes y volúmenes de tu aplicación.
Aquí hay un ejemplo de archivo docker-compose.yml:
version: "3"
services:
web:
build: .
ports:
- "8080:8080"
environment:
- DB_HOST=database
depends_on:
- database
database:
image: mysql:5.7
environment:
- MYSQL_DATABASE=myapp
- MYSQL_ROOT_PASSWORD=secret
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:
Este archivo de Compose define dos servicios: un servicio web y un servicio de base de datos. El servicio web se construye a partir del directorio actual, mientras que el servicio de base de datos utiliza la imagen oficial de MySQL 5.7. Los servicios se conectan a través de una red, y los datos del servicio de base de datos se persisten en un volumen con nombre.
Para implementar esta aplicación, puedes ejecutar docker-compose up -d en el mismo directorio que el archivo docker-compose.yml.
Escalado de Aplicaciones Docker
Docker facilita el escalado de tus aplicaciones agregando o eliminando contenedores. Puedes usar Docker Compose para escalar tus servicios:
docker-compose up -d --scale web=3
Este comando iniciará tres instancias del servicio "web".
Monitoreo y Registros
Docker proporciona herramientas integradas para monitorear y registrar tus contenedores. Puedes usar el comando docker stats para ver el uso de recursos en tiempo real y el comando docker logs para acceder a los registros de un contenedor.
Además, puedes integrar tus aplicaciones Docker con herramientas externas de monitoreo y registro, como Prometheus, Grafana y Elasticsearch, para obtener información y capacidades más avanzadas.
Resumen
En este tutorial, has aprendido a crear una imagen Docker personalizada utilizando un Dockerfile, así como a implementar y gestionar aplicaciones Docker. Ahora conoces el comando para construir una imagen Docker a partir de un Dockerfile personalizado, lo que te permite optimizar tu proceso de contenedorización e implementar aplicaciones de forma más eficaz.



