Cómo Crear Contenedores Docker en Linux

DockerBeginner
Practicar Ahora

Introducción

Este completo tutorial de Docker proporciona a los desarrolladores y administradores de sistemas una guía práctica para comprender e implementar la tecnología de contenedorización. Al explorar los conceptos centrales de Docker, los procedimientos de instalación y los comandos fundamentales, los participantes adquirirán habilidades esenciales para crear entornos de aplicaciones ligeros y portátiles.

Fundamentos de Docker

Introducción a la Tecnología de Contenedores

Docker es una potente plataforma de contenedorización que revoluciona el desarrollo y despliegue de software. Permite a los desarrolladores empaquetar aplicaciones con todas sus dependencias en unidades estandarizadas llamadas contenedores, garantizando un rendimiento consistente en diferentes entornos informáticos.

Conceptos Fundamentales de Docker

¿Qué es Docker?

Docker es una plataforma de código abierto para la tecnología de contenedorización que permite a los desarrolladores automatizar el despliegue, el escalado y la gestión de aplicaciones. A diferencia de las máquinas virtuales tradicionales, los contenedores Docker comparten el kernel del sistema host, lo que los hace ligeros y eficientes.

graph TD A[Código de la Aplicación] --> B[Contenedor Docker] B --> C[Despliegue Consistente] B --> D[Entorno Aislado]

Componentes Clave de Docker

Componente Descripción Propósito
Docker Engine Núcleo de ejecución Crea y ejecuta contenedores
Imagen Docker Plantilla de solo lectura Define la configuración del contenedor
Contenedor Docker Instancia ejecutable Ejecuta la aplicación

Instalación en Ubuntu 22.04

## Actualizar el índice de paquetes
sudo apt update

## Instalar dependencias
sudo apt install apt-transport-https ca-certificates curl software-properties-common

## Añadir la clave GPG oficial de Docker
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## Configurar el repositorio estable
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## Instalar Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

Comandos Básicos de Docker

## Comprobar la versión de Docker
docker --version

## Extraer una imagen
docker pull ubuntu:latest

## Listar imágenes
docker images

## Ejecutar un contenedor
docker run -it ubuntu:latest /bin/bash

Casos de Uso de la Contenedorización con Docker

Docker se utiliza ampliamente en:

  • Arquitectura de microservicios
  • Integración Continua/Entrega Continua (CI/CD)
  • Desarrollo de aplicaciones nativas de la nube
  • Entornos de desarrollo y producción consistentes

Creación de Imágenes Docker

Comprensión de las Imágenes Docker

Las imágenes Docker son plantillas de solo lectura que contienen todo lo necesario para ejecutar una aplicación: código, entorno de ejecución, bibliotecas, variables de entorno y archivos de configuración. Sirven como planos para crear contenedores.

graph LR A[Dockerfile] --> B[Imagen Docker] B --> C[Contenedor Docker]

Fundamentos de Dockerfile

Un Dockerfile es un documento de texto que contiene instrucciones para construir una imagen Docker. Cada instrucción crea una nueva capa en la imagen.

Tipos de Instrucciones de Dockerfile

Instrucción Propósito Ejemplo
FROM Establecer imagen base FROM ubuntu:22.04
RUN Ejecutar comandos RUN apt-get update
COPY Copiar archivos COPY app.py /app/
WORKDIR Establecer directorio de trabajo WORKDIR /app
CMD Comando predeterminado CMD ["python", "app.py"]

Creación de una Imagen de Ejemplo de Aplicación Python

Estructura del Proyecto de Ejemplo

/project
├── Dockerfile
└── app.py

app.py

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, Docker World!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Dockerfile

## Usar la imagen oficial de Python como imagen base
FROM python:3.9-slim

## Establecer el directorio de trabajo
WORKDIR /app

## Copiar archivos del proyecto
COPY app.py requirements.txt ./

## Instalar dependencias
RUN pip install --no-cache-dir -r requirements.txt

## Exponer puerto
EXPOSE 5000

## Definir comando predeterminado
CMD ["python", "app.py"]

Construcción y Gestión de Imágenes Docker

## Crear requirements.txt
echo "flask" > requirements.txt

## Construir imagen Docker
docker build -t my-flask-app .

## Listar imágenes
docker images

## Ejecutar contenedor a partir de la imagen
docker run -p 5000:5000 my-flask-app

Estrategias de Optimización de Imágenes

  • Usar construcciones multietapa
  • Minimizar el número de capas
  • Aprovechar la caché de compilación
  • Usar etiquetas de imagen específicas
  • Eliminar archivos innecesarios

Administración de Contenedores

Descripción General del Ciclo de Vida de los Contenedores

Los contenedores Docker tienen un ciclo de vida complejo con múltiples estados, desde la creación hasta la terminación. Comprender estos estados es crucial para una gestión y orquestación efectivas de los contenedores.

stateDiagram-v2 [*] --> Created Created --> Running Running --> Paused Paused --> Running Running --> Stopped Stopped --> Removed Removed --> [*]

Comandos Esenciales de Contenedores Docker

Comando Función Ejemplo
docker create Crear contenedor docker create nginx
docker start Iniciar contenedor docker start container_id
docker stop Detener contenedor docker stop container_id
docker restart Reiniciar contenedor docker restart container_id
docker rm Eliminar contenedor docker rm container_id

Inspección y Monitoreo de Contenedores

## Listar contenedores en ejecución
docker ps

## Listar todos los contenedores
docker ps -a

## Inspeccionar detalles del contenedor
docker inspect container_id

## Ver registros del contenedor
docker logs container_id

## Monitorear el uso de recursos del contenedor
docker stats

Gestión de Recursos de Contenedores

## Ejecutar contenedor con límites de CPU y memoria
docker run -d \
  --cpus="1.5" \
  --memory="512m" \
  --name limited-container \
  nginx

Redes Avanzadas de Contenedores

## Crear red personalizada
docker network create mynetwork

## Ejecutar contenedor en una red específica
docker run -d \
  --network=mynetwork \
  --name web-container \
  nginx

Estrategias de Escalado de Contenedores

## Escalar varias instancias de contenedores
docker-compose up -d --scale web=3

Gestión de Datos Persistentes

## Crear volumen
docker volume create myvolume

## Montar volumen en el contenedor
docker run -v myvolume:/app/data \
  --name data-container \
  ubuntu

Buenas Prácticas

  • Usar imágenes base ligeras
  • Implementar comprobaciones de estado
  • Minimizar el tamaño del contenedor
  • Usar construcciones multietapa
  • Implementar registro adecuado
  • Asegurar las configuraciones del contenedor

Resumen

Docker representa un enfoque revolucionario para la implementación de software, ofreciendo a los desarrolladores una plataforma potente para crear contenedores de aplicaciones consistentes, aisladas y escalables. Al dominar las técnicas fundamentales de Docker, los profesionales pueden optimizar los flujos de trabajo de desarrollo, mejorar la eficiencia del sistema y simplificar la gestión de aplicaciones complejas en diversas infraestructuras informáticas.