Cómo Crear Contenedores Docker en Ubuntu

DockerBeginner
Practicar Ahora

Introducción

Este completo tutorial de Docker proporciona a los desarrolladores y profesionales de TI conocimientos esenciales sobre la tecnología de contenedores. Aprenda a configurar Docker en Ubuntu, comprenda los conceptos centrales y aproveche la contenedorización para la implementación consistente de aplicaciones en diferentes entornos informáticos.

Conceptos Fundamentales de Docker

Introducción a la Tecnología Docker

Docker es una potente plataforma de tecnología de contenedores que revoluciona la implementación y la virtualización de software. Como herramienta de código abierto, Docker permite a los desarrolladores empaquetar, distribuir y ejecutar aplicaciones de forma consistente en diferentes entornos informáticos.

Conceptos Fundamentales de Docker

¿Qué es Docker?

Docker es una tecnología de virtualización ligera que permite a los desarrolladores crear, implementar y ejecutar aplicaciones mediante contenedores. A diferencia de las máquinas virtuales tradicionales, los contenedores comparten el kernel del sistema host, lo que los hace más eficientes y rápidos de iniciar.

Arquitectura de Contenedores

graph TD
    A[Motor Docker] --> B[Entorno de Ejecución de Contenedores]
    A --> C[Imágenes Docker]
    B --> D[Contenedor de la Aplicación]
    C --> D

Componentes Clave de Docker

Componente Descripción Propósito
Motor Docker Entorno de ejecución central Gestiona el ciclo de vida del contenedor
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 el motor Docker
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

## Verificar la instalación de Docker
docker run hello-world

## Listar contenedores en ejecución
docker ps

## Listar todos los contenedores
docker ps -a

Ventajas de Docker

Docker proporciona beneficios significativos para el desarrollo de software moderno:

  • Entorno consistente entre desarrollo y producción
  • Implementación de aplicaciones más rápida
  • Mejora de la utilización de recursos
  • Gestión simplificada de dependencias
  • Escalabilidad y portabilidad mejoradas

Creación de Imágenes Docker

Comprensión de las Imágenes Docker

Las imágenes Docker son plantillas de solo lectura utilizadas para crear contenedores. Contienen el código de la aplicación, el entorno de ejecución, las bibliotecas, las variables de entorno y los archivos de configuración necesarios para ejecutar una aplicación.

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.

Estructura de Dockerfile

graph TD
    A[Imagen Base] --> B[Instalar Dependencias]
    B --> C[Copiar Código de la Aplicación]
    C --> D[Establecer Variables de Entorno]
    D --> E[Definir Comando de Inicio]

Instrucciones Comunes de Dockerfile

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

Creación de una Imagen Simple de Aplicación Web Python

Dockerfile de Ejemplo

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

## Establecer el directorio de trabajo
WORKDIR /app

## Copiar el archivo de requisitos
COPY requirements.txt .

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

## Copiar el código de la aplicación
COPY . .

## Exponer puerto
EXPOSE 5000

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

Construcción de la Imagen Docker

## Construir la imagen con etiqueta
docker build -t hello-world-app .

## Listar imágenes locales
docker images

## Ejecutar la imagen creada
docker run -p 5000:5000 hello-world-app

Comandos de Administración de Imágenes

## Eliminar imagen específica
docker rmi hello-world-app

## Eliminar todas las imágenes no utilizadas
docker image prune

## Descargar imagen desde Docker Hub
docker pull ubuntu:22.04

Buenas Prácticas

  • Usar imágenes base mínimas
  • Minimizar el número de capas
  • Evitar instalar paquetes innecesarios
  • Usar compilaciones multietapa para imágenes más pequeñas
  • Aprovechar la caché de compilación de forma eficiente

Administración de Contenedores

Descripción General del Ciclo de Vida de los Contenedores

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

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

Operaciones Básicas con Contenedores

Comandos de Administración de Contenedores

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

Ejecución de Contenedores

## Ejecutar contenedor en primer plano
docker run nginx

## Ejecutar contenedor en segundo plano
docker run -d nginx

## Ejecutar contenedor con asignación de puertos
docker run -p 8080:80 nginx

## Ejecutar contenedor con nombre personalizado
docker run --name web-server nginx

Inspección y Monitoreo de Contenedores

## Listar contenedores en ejecución
docker ps

## Listar todos los contenedores
docker ps -a

## Ver registros del contenedor
docker logs container_id

## Inspeccionar detalles del contenedor
docker inspect container_id

## Monitorear el uso de recursos del contenedor
docker stats

Redes de Contenedores

## Listar redes Docker
docker network ls

## Crear una red personalizada
docker network create mynetwork

## Conectar un contenedor a la red
docker network connect mynetwork container_id

Administración Avanzada de Contenedores

Límites de Recursos del Contenedor

## Limitar CPU y memoria
docker run -d \
  --cpus="1.5" \
  --memory="512m" \
  nginx

Escalado de Contenedores

## Crear varias instancias de contenedores
docker run -d -p 8001:80 nginx
docker run -d -p 8002:80 nginx
docker run -d -p 8003:80 nginx

Estrategias de Implementación de Contenedores

Gestión de Datos Persistentes

## Crear un volumen
docker volume create myvolume

## Montar el volumen en el contenedor
docker run -v myvolume:/app/data nginx

Configuración del Entorno

## Establecer variables de entorno
docker run -e DATABASE_URL=localhost nginx

Resumen

Docker revoluciona el desarrollo de software al permitir contenedores ligeros y portátiles que simplifican la implementación de aplicaciones. Al dominar los componentes centrales de Docker, el proceso de instalación y los comandos básicos, los desarrolladores pueden crear entornos de software más eficientes, escalables y reproducibles con una sobrecarga mínima y la máxima flexibilidad.