Introducción
Las imágenes de Docker son la base de los contenedores Docker. Una imagen es una plantilla inmutable que contiene todo lo necesario para ejecutar una aplicación: código, runtime, bibliotecas, variables de entorno y configuraciones. En esta sección, aprenderás qué son las imágenes de Docker, cómo funcionan y cómo puedes utilizarlas para crear contenedores.
Conceptos Clave
- ¿Qué es una Imagen de Docker?
- Definición: Una imagen de Docker es un paquete ligero, independiente y ejecutable que incluye todo lo necesario para ejecutar una pieza de software.
- Inmutabilidad: Las imágenes son inmutables, lo que significa que no pueden ser modificadas una vez creadas. Cualquier cambio requiere la creación de una nueva imagen.
- Capas de una Imagen
- Capas: Las imágenes de Docker están compuestas por una serie de capas. Cada capa representa una instrucción en el Dockerfile.
- Caché: Docker utiliza un sistema de caché para las capas, lo que permite reutilizar capas existentes y acelerar el proceso de construcción de imágenes.
- Dockerfile
- Definición: Un Dockerfile es un archivo de texto que contiene una serie de instrucciones para construir una imagen de Docker.
- Instrucciones Comunes:
FROM
,RUN
,COPY
,CMD
,ENTRYPOINT
,EXPOSE
,ENV
.
Ejemplo Práctico
Vamos a crear una imagen de Docker simple que ejecuta una aplicación web en Python utilizando Flask.
Paso 1: Crear el Dockerfile
# Usar una imagen base de Python FROM python:3.8-slim # Establecer el directorio de trabajo WORKDIR /app # Copiar los archivos de la aplicación al contenedor COPY . /app # Instalar las dependencias RUN pip install --no-cache-dir -r requirements.txt # Exponer el puerto en el que la aplicación correrá EXPOSE 5000 # Comando para ejecutar la aplicación CMD ["python", "app.py"]
Paso 2: Crear los Archivos de la Aplicación
requirements.txt
app.py
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, Docker!' if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
Paso 3: Construir la Imagen
Paso 4: Ejecutar un Contenedor
Ejercicio Práctico
Ejercicio 1: Crear una Imagen de Docker para una Aplicación Node.js
- Crear un Dockerfile para una aplicación Node.js que sirva una página web simple.
- Construir la Imagen utilizando el comando
docker build
. - Ejecutar un Contenedor a partir de la imagen creada.
Solución
Dockerfile
# Usar una imagen base de Node.js FROM node:14 # Establecer el directorio de trabajo WORKDIR /app # Copiar los archivos de la aplicación al contenedor COPY . /app # Instalar las dependencias RUN npm install # Exponer el puerto en el que la aplicación correrá EXPOSE 3000 # Comando para ejecutar la aplicación CMD ["node", "index.js"]
index.js
const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hello, Docker with Node.js!'); }); app.listen(3000, () => { console.log('Server is running on port 3000'); });
package.json
{ "name": "docker-node-app", "version": "1.0.0", "main": "index.js", "dependencies": { "express": "^4.17.1" } }
Comandos
Conclusión
En esta sección, hemos aprendido qué son las imágenes de Docker, cómo se componen de capas y cómo se pueden crear utilizando un Dockerfile. También hemos visto un ejemplo práctico de cómo construir y ejecutar una imagen de Docker para una aplicación web en Python. A continuación, profundizaremos en cómo trabajar con imágenes Docker en el siguiente módulo.
Docker: De Principiante a Avanzado
Módulo 1: Introducción a Docker
- ¿Qué es Docker?
- Instalando Docker
- Arquitectura de Docker
- Comandos Básicos de Docker
- Entendiendo las Imágenes de Docker
- Creando tu Primer Contenedor Docker
Módulo 2: Trabajando con Imágenes Docker
- Docker Hub y Repositorios
- Construyendo Imágenes Docker
- Conceptos Básicos de Dockerfile
- Gestionando Imágenes Docker
- Etiquetado y Publicación de Imágenes
Módulo 3: Contenedores Docker
- Ejecutando Contenedores
- Ciclo de Vida del Contenedor
- Gestionando Contenedores
- Redes en Docker
- Persistencia de Datos con Volúmenes
Módulo 4: Docker Compose
- Introducción a Docker Compose
- Definiendo Servicios en Docker Compose
- Comandos de Docker Compose
- Aplicaciones Multi-Contenedor
- Variables de Entorno en Docker Compose
Módulo 5: Conceptos Avanzados de Docker
- Profundización en Redes Docker
- Opciones de Almacenamiento Docker
- Mejores Prácticas de Seguridad en Docker
- Optimizando Imágenes Docker
- Registro y Monitoreo en Docker
Módulo 6: Docker en Producción
- CI/CD con Docker
- Orquestando Contenedores con Docker Swarm
- Introducción a Kubernetes
- Desplegando Contenedores Docker en Kubernetes
- Escalado y Balanceo de Carga