Cómo construir y ejecutar contenedores Docker con Dockerfiles

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Este tutorial lo guiará a través del proceso de creación y ejecución de contenedores Docker utilizando Dockerfiles. Aprenderá sobre la arquitectura de Docker, cómo crear imágenes Docker, administrar contenedores Docker y desplegar aplicaciones Docker escalables. Ya sea que sea nuevo en Docker o busque mejorar sus habilidades existentes, esta guía integral le proporcionará el conocimiento necesario para trabajar con Docker de manera efectiva.

Introducción a Docker

Docker es una popular plataforma de código abierto que permite a los desarrolladores construir, desplegar y ejecutar aplicaciones en un entorno contenerizado. Los contenedores son unidades ligeras, independientes y autocontenidas que empaquetan el código de una aplicación, sus dependencias y el entorno de ejecución en un solo paquete portable. Este enfoque simplifica el proceso de desarrollo, prueba y despliegue de aplicaciones, lo que facilita garantizar que la aplicación se ejecute de manera consistente en diferentes entornos de cómputo.

¿Qué es Docker?

Docker es una plataforma de software que te permite construir, desplegar y ejecutar aplicaciones en contenedores. Los contenedores son una forma de empaquetar una aplicación y todas sus dependencias en una sola unidad que puede ejecutarse de manera consistente en cualquier entorno de cómputo. Este enfoque ayuda a garantizar que la aplicación se ejecute de la misma manera, independientemente de la infraestructura subyacente.

Beneficios de usar Docker

  1. Consistencia: Los contenedores garantizan que la aplicación se ejecute de la misma manera, independientemente de la infraestructura subyacente.
  2. Escalabilidad: Los contenedores se pueden escalar fácilmente hacia arriba o hacia abajo para satisfacer la demanda cambiante.
  3. Eficiencia: Los contenedores son ligeros y utilizan menos recursos que las máquinas virtuales tradicionales.
  4. Portabilidad: Los contenedores se pueden mover fácilmente entre diferentes entornos de cómputo, como desarrollo, prueba y producción.

Arquitectura de Docker

Docker utiliza una arquitectura cliente-servidor, donde el cliente Docker se comunica con el demonio Docker, que es responsable de construir, ejecutar y administrar los contenedores. El demonio Docker se ejecuta en la máquina host, mientras que el cliente Docker puede ejecutarse en la misma máquina o en una máquina remota.

graph TD A[Docker Client] -- Communicates with --> B[Docker Daemon] B -- Manages --> C[Docker Containers] B -- Builds --> D[Docker Images] B -- Stores --> E[Docker Registry]

Empezando con Docker

Para comenzar con Docker, necesitarás instalar el software de Docker en tu máquina. Puedes descargar la versión adecuada para tu sistema operativo desde el sitio web de Docker. Una vez que tengas Docker instalado, puedes comenzar a usarlo para construir y ejecutar tus aplicaciones en contenedores.

Comprendiendo la arquitectura de Docker

La arquitectura de Docker se basa en un modelo cliente-servidor, donde el cliente Docker se comunica con el demonio Docker para realizar diversas operaciones, como construir, ejecutar y administrar contenedores.

Componentes de Docker

Los principales componentes de la arquitectura de Docker son:

  1. Cliente Docker: El cliente Docker es la interfaz principal para que los usuarios interactúen con Docker. Permite a los usuarios emitir comandos al demonio Docker, como construir, ejecutar y administrar contenedores.

  2. Demonio Docker: El demonio Docker es el componente del lado del servidor de la arquitectura de Docker. Es responsable de administrar los objetos de Docker, como imágenes, contenedores, redes y volúmenes.

  3. Imágenes Docker: Las imágenes Docker son la base de los contenedores. Son plantillas de solo lectura que contienen el código de la aplicación, las dependencias y otros archivos necesarios para ejecutar la aplicación.

  4. Contenedores Docker: Los contenedores Docker son las instancias en ejecución de las imágenes Docker. Encapsulan la aplicación y sus dependencias, lo que garantiza que se ejecute de manera consistente en diferentes entornos.

  5. Registros Docker: Los registros Docker son los sistemas de almacenamiento y distribución de las imágenes Docker. Permiten a los usuarios cargar, descargar y compartir imágenes Docker.

Diagrama de la arquitectura de Docker

El siguiente diagrama ilustra la arquitectura de Docker y las interacciones entre sus componentes:

graph TD A[Docker Client] -- Communicates with --> B[Docker Daemon] B -- Manages --> C[Docker Containers] B -- Builds --> D[Docker Images] B -- Pulls/Pushes --> E[Docker Registry]

Redes de Docker

Docker proporciona capacidades de red integradas para permitir que los contenedores se comuniquen entre sí y con el mundo exterior. Docker admite varios controladores de red, entre ellos:

  1. Red de puente (Bridge Network): El controlador de red predeterminado que conecta los contenedores que se ejecutan en el mismo host.
  2. Red de host (Host Network): Permite que un contenedor utilice la pila de red del host, omitiendo la red de Docker.
  3. Red de superposición (Overlay Network): Permite la comunicación entre contenedores que se ejecutan en diferentes hosts de Docker.

Gestión de datos de Docker

Docker proporciona dos mecanismos principales para gestionar los datos en los contenedores:

  1. Volúmenes: Almacenamiento persistente que es administrado por Docker y que se puede compartir entre contenedores.
  2. Montajes de enlace (Bind Mounts): Permite montar un directorio de la máquina host en un contenedor.

Al comprender la arquitectura de Docker y sus diversos componentes, puedes construir, desplegar y administrar tus aplicaciones de manera efectiva utilizando Docker.

Construyendo imágenes Docker con Dockerfiles

Los Dockerfiles son los planos para crear imágenes Docker. Definen los pasos necesarios para construir una imagen Docker, incluyendo la imagen base, la instalación de dependencias y la configuración de la aplicación.

¿Qué es un Dockerfile?

Un Dockerfile es un archivo de texto que contiene una serie de instrucciones y comandos utilizados para construir una imagen Docker. Proporciona una forma de automatizar el proceso de creación de una imagen Docker, asegurando que la imagen se pueda construir de manera consistente y confiable en diferentes entornos.

Sintaxis del Dockerfile

Los Dockerfiles utilizan una sintaxis específica para definir los pasos de construcción de una imagen Docker. Las instrucciones más comunes de un Dockerfile son:

Instrucción Descripción
FROM Especifica la imagen base a utilizar para la construcción
COPY Copia archivos o directorios desde el host al contenedor
RUN Ejecuta un comando en el contenedor durante el proceso de construcción
CMD Especifica el comando predeterminado a ejecutar cuando el contenedor se inicia
EXPOSE Informa a Docker que el contenedor escucha en los puertos de red especificados
ENV Establece variables de entorno en el contenedor

A continuación, se muestra un ejemplo de Dockerfile que construye una aplicación web sencilla utilizando Python:

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt.
RUN pip install --no-cache-dir -r requirements.txt

COPY..

CMD ["python", "app.py"]

EXPOSE 5000

Construyendo imágenes Docker

Para construir una imagen Docker utilizando un Dockerfile, puedes utilizar el comando docker build:

docker build -t my-app.

Este comando construirá una imagen Docker con la etiqueta my-app utilizando el Dockerfile en el directorio actual.

Enviando imágenes Docker a un registro

Una vez que hayas construido una imagen Docker, puedes enviarla a un registro Docker, como Docker Hub o un registro privado, para compartirla con otros o desplegarla en un entorno de producción.

docker push my-app:latest

Al entender cómo crear y utilizar Dockerfiles, puedes construir y administrar de manera efectiva imágenes Docker para tus aplicaciones.

Ejecutando y administrando contenedores Docker

Una vez que hayas construido una imagen Docker, puedes utilizarla para ejecutar y administrar contenedores Docker. Los contenedores son las instancias en ejecución de las imágenes Docker y proporcionan una forma de empaquetar y ejecutar tus aplicaciones en un entorno consistente y aislado.

Ejecutando contenedores Docker

Para ejecutar un contenedor Docker, puedes utilizar el comando docker run:

docker run -d -p 8080:80 --name my-web-app my-app

Este comando iniciará un nuevo contenedor basado en la imagen my-app, se desasociará de la salida del contenedor (-d), mapeará el puerto 80 del contenedor al puerto 8080 del host (-p 8080:80) y asignará el nombre my-web-app al contenedor.

Administrando contenedores Docker

Docker proporciona varios comandos para administrar los contenedores en ejecución:

Comando Descripción
docker ps Lista todos los contenedores en ejecución
docker stop <container_id> Detiene un contenedor en ejecución
docker start <container_id> Inicia un contenedor detenido
docker rm <container_id> Elimina un contenedor
docker logs <container_id> Muestra los registros de un contenedor
docker exec -it <container_id> <command> Ejecuta un comando dentro de un contenedor en ejecución

Por ejemplo, para ver los registros de un contenedor en ejecución:

docker logs my-web-app

Y para ejecutar un comando dentro de un contenedor en ejecución:

docker exec -it my-web-app bash

Gestión del ciclo de vida de los contenedores

Docker proporciona varios comandos para gestionar el ciclo de vida de los contenedores:

  • docker create: Crea un nuevo contenedor pero no lo inicia
  • docker start: Inicia un contenedor creado
  • docker stop: Detiene un contenedor en ejecución
  • docker restart: Reinicia un contenedor
  • docker kill: Envía una señal SIGKILL a un contenedor en ejecución
  • docker pause: Pausa todos los procesos en un contenedor
  • docker unpause: Reanuda un contenedor pausado

Al entender cómo ejecutar y administrar contenedores Docker, puedes desplegar y escalar tus aplicaciones de manera efectiva utilizando Docker.

Redes y gestión de datos en Docker

Docker proporciona capacidades integradas de redes y gestión de datos para ayudarte a conectar tus contenedores y persistir sus datos.

Redes de Docker

Docker admite varios controladores de red para permitir que los contenedores se comuniquen entre sí y con el mundo exterior:

  1. Red de puente (Bridge Network): El controlador de red predeterminado que conecta los contenedores que se ejecutan en el mismo host.
  2. Red de host (Host Network): Permite que un contenedor utilice la pila de red del host, omitiendo la red de Docker.
  3. Red de superposición (Overlay Network): Permite la comunicación entre contenedores que se ejecutan en diferentes hosts de Docker.

Puedes crear y administrar redes Docker utilizando los siguientes comandos:

## Create a new bridge network
docker network create my-network

## Connect a container to a network
docker run -d --name my-app --network my-network my-app

## Inspect a network
docker network inspect my-network

Gestión de datos de Docker

Docker proporciona dos mecanismos principales para gestionar los datos en los contenedores:

  1. Volúmenes: Almacenamiento persistente que es administrado por Docker y que se puede compartir entre contenedores.
  2. Montajes de enlace (Bind Mounts): Permite montar un directorio de la máquina host en un contenedor.

A continuación, se muestra un ejemplo de cómo crear un volumen y montarlo en un contenedor:

## Create a new volume
docker volume create my-volume

## Run a container and mount the volume
docker run -d --name my-app -v my-volume:/app my-app

En este ejemplo, el volumen my-volume se monta en el directorio /app dentro del contenedor.

Mejores prácticas de gestión de redes y datos

Al trabajar con redes y gestión de datos en Docker, considera las siguientes mejores prácticas:

  1. Utiliza volúmenes con nombre para el almacenamiento persistente de datos.
  2. Evita almacenar datos sensibles en contenedores o volúmenes.
  3. Utiliza redes de superposición para la comunicación entre múltiples hosts.
  4. Aísla diferentes servicios o aplicaciones utilizando redes separadas.
  5. Monitorea y gestiona los recursos de red y almacenamiento para garantizar un rendimiento y una confiabilidad óptimos.

Al entender las capacidades de redes y gestión de datos de Docker, puedes construir, desplegar y escalar tus aplicaciones de manera efectiva en un entorno contenerizado.

Desplegando y escalando aplicaciones Docker

Docker facilita el despliegue y escalado de tus aplicaciones al proporcionar herramientas y plataformas que simplifican el proceso. En esta sección, exploraremos algunos enfoques comunes para desplegar y escalar aplicaciones basadas en Docker.

Desplegando aplicaciones Docker

Hay varias formas de desplegar aplicaciones Docker, dependiendo de tu infraestructura y requisitos:

  1. Docker Compose: Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker de múltiples contenedores. Te permite definir los servicios, redes y volúmenes de tu aplicación en un archivo YAML y luego desplegar toda la aplicación con un solo comando.

    version: "3"
    services:
      web:
        image: my-web-app
        ports:
          - 8080:80
      db:
        image: mysql:5.7
        volumes:
          - db-data:/var/lib/mysql
    volumes:
      db-data:
  2. Docker Swarm: Docker Swarm es una herramienta de orquestación integrada que te permite gestionar un clúster de hosts Docker y desplegar tus aplicaciones en múltiples nodos. Proporciona características como balanceo de carga, descubrimiento de servicios y alta disponibilidad.

  3. Kubernetes: Kubernetes es una popular plataforma de orquestación de contenedores de código abierto que se puede utilizar para desplegar y gestionar aplicaciones basadas en Docker. Proporciona características avanzadas como escalado automático, auto-recuperación y actualizaciones graduales.

Escalando aplicaciones Docker

El escalado de aplicaciones Docker se puede lograr de varias maneras:

  1. Escalado horizontal: Añadir más instancias de contenedores para manejar una carga aumentada. Esto se puede hacer manualmente o automáticamente utilizando herramientas como Docker Swarm o Kubernetes.

  2. Escalado vertical: Aumentar los recursos (CPU, memoria, almacenamiento) de una instancia de contenedor para manejar más carga.

  3. Balanceo de carga: Distribuir el tráfico entrante entre múltiples instancias de contenedores para mejorar el rendimiento y la disponibilidad.

    graph LR A[Load Balancer] -- Distributes Traffic --> B[Container 1] A -- Distributes Traffic --> C[Container 2] A -- Distributes Traffic --> D[Container 3]
  4. Escalado automático: Escalar automáticamente el número de instancias de contenedores en función de métricas o reglas predefinidas, como la utilización de CPU o el volumen de solicitudes.

Al aprovechar las capacidades de despliegue y escalado de Docker, puedes construir aplicaciones altamente escalables y resistentes que puedan adaptarse a las demandas y requisitos cambiantes.

Resumen

En este tutorial, has aprendido cómo construir y ejecutar contenedores Docker utilizando Dockerfiles. Has explorado la arquitectura de Docker, comprendido el proceso de creación de imágenes Docker, administrado contenedores Docker y explorado la gestión de redes y datos en Docker. Finalmente, has aprendido sobre el despliegue y escalado de aplicaciones Docker. Con este conocimiento, ahora puedes trabajar con confianza con Docker para optimizar tus procesos de desarrollo y despliegue.