Introducción
Los contenedores de Linux y Docker han revolucionado la forma en que desarrollamos, desplegamos y gestionamos aplicaciones. En esta sección, aprenderás los conceptos básicos de los contenedores, cómo funcionan y cómo utilizar Docker para gestionar contenedores de manera eficiente.
¿Qué es un Contenedor?
Un contenedor es una unidad estándar de software que empaqueta el código y todas sus dependencias para que la aplicación se ejecute de manera rápida y confiable en diferentes entornos informáticos. Los contenedores son ligeros y se ejecutan en el mismo sistema operativo, pero están aislados unos de otros.
Ventajas de los Contenedores
- Portabilidad: Los contenedores pueden ejecutarse en cualquier entorno que soporte Docker.
- Aislamiento: Cada contenedor tiene su propio entorno aislado.
- Eficiencia: Los contenedores son ligeros y utilizan menos recursos que las máquinas virtuales.
- Escalabilidad: Facilitan la escalabilidad horizontal de las aplicaciones.
Docker: La Plataforma de Contenedores
Docker es una plataforma de contenedores que permite a los desarrolladores empaquetar aplicaciones en contenedores. Docker proporciona herramientas para crear, desplegar y gestionar contenedores de manera eficiente.
Instalación de Docker
En Ubuntu
sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt update sudo apt install docker-ce
En CentOS
sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.io sudo systemctl start docker sudo systemctl enable docker
Comandos Básicos de Docker
Verificar la Instalación
Ejecutar un Contenedor
Este comando descarga una imagen de prueba y ejecuta un contenedor que imprime un mensaje de bienvenida.
Listar Contenedores
Detener un Contenedor
Eliminar un Contenedor
Creación de Imágenes Docker
Las imágenes Docker son plantillas que se utilizan para crear contenedores. Puedes crear tus propias imágenes utilizando un archivo Dockerfile
.
Ejemplo de Dockerfile
# Usar una imagen base de Python FROM python:3.8-slim # Establecer el directorio de trabajo WORKDIR /app # Copiar los archivos necesarios COPY . /app # Instalar las dependencias RUN pip install -r requirements.txt # Comando para ejecutar la aplicación CMD ["python", "app.py"]
Construir una Imagen
Ejecutar un Contenedor desde una Imagen
Docker Compose
Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker con múltiples contenedores. Utiliza un archivo docker-compose.yml
para configurar los servicios.
Ejemplo de docker-compose.yml
Comandos de Docker Compose
- Iniciar los Servicios:
docker-compose up
- Detener los Servicios:
docker-compose down
Ejercicios Prácticos
Ejercicio 1: Crear y Ejecutar un Contenedor Simple
- Objetivo: Crear un contenedor que ejecute una aplicación simple de Python.
- Pasos:
- Crear un archivo
app.py
con el siguiente contenido:print("Hello, Docker!")
- Crear un archivo
Dockerfile
con el siguiente contenido:FROM python:3.8-slim COPY app.py /app.py CMD ["python", "/app.py"]
- Construir la imagen:
docker build -t hello-docker .
- Ejecutar el contenedor:
docker run hello-docker
- Crear un archivo
Ejercicio 2: Configurar una Aplicación con Docker Compose
- Objetivo: Configurar una aplicación web simple con Redis utilizando Docker Compose.
- Pasos:
- Crear un archivo
app.py
con el siguiente contenido:from flask import Flask from redis import Redis app = Flask(__name__) redis = Redis(host='redis', port=6379) @app.route('/') def hello(): redis.incr('hits') return f"Hello! This page has been visited {redis.get('hits').decode('utf-8')} times." if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
- Crear un archivo
requirements.txt
con el siguiente contenido:Flask redis
- Crear un archivo
Dockerfile
con el siguiente contenido:FROM python:3.8-slim WORKDIR /app COPY . /app RUN pip install -r requirements.txt CMD ["python", "app.py"]
- Crear un archivo
docker-compose.yml
con el siguiente contenido:version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"
- Iniciar los servicios:
docker-compose up
- Crear un archivo
Conclusión
En esta sección, has aprendido los conceptos básicos de los contenedores de Linux y cómo utilizar Docker para gestionar contenedores. Has visto cómo crear y ejecutar contenedores, construir imágenes Docker y utilizar Docker Compose para gestionar aplicaciones con múltiples contenedores. Con estos conocimientos, estás preparado para aprovechar al máximo las ventajas de los contenedores en tus proyectos.
En la siguiente sección, exploraremos la automatización con Ansible, una herramienta poderosa para la gestión de configuraciones y despliegues.
Maestría en Linux: De Principiante a Avanzado
Módulo 1: Introducción a Linux
- ¿Qué es Linux?
- Historia de Linux
- Distribuciones de Linux
- Instalando Linux
- Estructura del Sistema de Archivos de Linux
Módulo 2: Comandos Básicos de Linux
- Introducción a la Línea de Comandos
- Navegando el Sistema de Archivos
- Operaciones de Archivos y Directorios
- Visualización y Edición de Archivos
- Permisos y Propiedad de Archivos
Módulo 3: Habilidades Avanzadas en la Línea de Comandos
- Uso de Comodines y Expresiones Regulares
- Tuberías y Redirección
- Gestión de Procesos
- Programación de Tareas con Cron
- Comandos de Redes
Módulo 4: Scripting en Shell
- Introducción al Scripting en Shell
- Variables y Tipos de Datos
- Estructuras de Control
- Funciones y Librerías
- Depuración y Manejo de Errores
Módulo 5: Administración del Sistema
- Gestión de Usuarios y Grupos
- Gestión de Discos
- Gestión de Paquetes
- Monitoreo del Sistema y Optimización del Rendimiento
- Respaldo y Restauración
Módulo 6: Redes y Seguridad
- Configuración de Redes
- Firewall y Seguridad
- SSH y Acceso Remoto
- Sistemas de Detección de Intrusos
- Asegurando Sistemas Linux
Módulo 7: Temas Avanzados
- Virtualización con Linux
- Contenedores de Linux y Docker
- Automatización con Ansible
- Optimización del Kernel de Linux
- Alta Disponibilidad y Balanceo de Carga