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

  1. ¿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.

  1. 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.

  1. 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

Flask==2.0.1

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

docker build -t my-flask-app .

Paso 4: Ejecutar un Contenedor

docker run -p 5000:5000 my-flask-app

Ejercicio Práctico

Ejercicio 1: Crear una Imagen de Docker para una Aplicación Node.js

  1. Crear un Dockerfile para una aplicación Node.js que sirva una página web simple.
  2. Construir la Imagen utilizando el comando docker build.
  3. 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
docker build -t my-node-app .
docker run -p 3000:3000 my-node-app

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.

© Copyright 2024. Todos los derechos reservados