Cómo crear un contenedor Docker en Linux

DockerBeginner
Practicar Ahora

Introducción

Docker es una potente plataforma de contenedorización que ha revolucionado la forma en que los desarrolladores y profesionales de TI gestionan e implementan aplicaciones. En este tutorial, te guiaremos a través del proceso de creación de un contenedor Docker en un sistema Linux, desde la instalación y configuración de Docker hasta la creación y ejecución de tus propios contenedores personalizados.

Entendiendo los Contenedores Docker

Docker es una popular plataforma de código abierto que permite a los desarrolladores construir, implementar y ejecutar aplicaciones en un entorno de contenedorización. Los contenedores son paquetes de software ligeros, autónomos y ejecutables que incluyen todo lo necesario para ejecutar una aplicación, incluyendo el código, el tiempo de ejecución, las herramientas del sistema y las bibliotecas.

¿Qué es un Contenedor Docker?

Un contenedor Docker es una unidad de software estandarizada que empaqueta el código y todas sus dependencias, de modo que la aplicación se ejecute de forma rápida y fiable de un entorno informático a otro. Los contenedores se crean a partir de imágenes Docker, que son los planos para crear contenedores. Los contenedores Docker están aislados entre sí y del sistema operativo host, proporcionando un entorno de tiempo de ejecución consistente y predecible.

Beneficios de los Contenedores Docker

  • Portabilidad: Los contenedores Docker se pueden ejecutar en cualquier máquina que tenga Docker instalado, independientemente de la infraestructura subyacente o el sistema operativo.
  • Consistencia: Los contenedores Docker garantizan que la aplicación se ejecutará de la misma manera, independientemente del entorno.
  • Eficiencia: Los contenedores Docker son ligeros y utilizan menos recursos que las máquinas virtuales, ya que comparten el kernel del sistema operativo host.
  • Escalabilidad: Los contenedores Docker se pueden escalar fácilmente hacia arriba o hacia abajo, lo que facilita la gestión e implementación de aplicaciones.
  • Aislamiento: Los contenedores Docker están aislados entre sí y del sistema operativo host, mejorando la seguridad y la estabilidad.

Arquitectura de un Contenedor Docker

graph TD A[Host Docker] --> B[Motor Docker] B --> C[Imágenes Docker] B --> D[Contenedores Docker] D --> E[Aplicación] D --> F[Bibliotecas] D --> G[Herramientas del Sistema]

Ciclo de Vida de un Contenedor Docker

  1. Construcción: Crear una imagen Docker a partir de un Dockerfile.
  2. Envío: Almacenar la imagen Docker en un registro, como Docker Hub.
  3. Ejecución: Crear y ejecutar un contenedor Docker a partir de la imagen.

Casos de Uso de los Contenedores Docker

  • Microservicios: Los contenedores Docker son adecuados para construir e implementar aplicaciones basadas en microservicios.
  • Integración Continua y Entrega Continua (CI/CD): Los contenedores Docker se pueden utilizar para automatizar la construcción, las pruebas y la implementación de aplicaciones.
  • Alojamiento en la Nube: Los contenedores Docker se pueden implementar y escalar fácilmente en plataformas en la nube, como AWS, Azure y Google Cloud.
  • Aprendizaje Automático y Ciencia de Datos: Los contenedores Docker se pueden utilizar para empaquetar e implementar modelos de aprendizaje automático y tuberías de procesamiento de datos.

Instalación y Configuración de Docker en Linux

Instalación de Docker en Ubuntu 22.04

  1. Actualiza el índice de paquetes:
sudo apt-get update
  1. Instala los paquetes necesarios para permitir que apt utilice un repositorio a través de HTTPS:
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  1. Agrega la clave GPG oficial de Docker:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  1. Configura el repositorio de Docker:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Instala Docker Engine, containerd y Docker Compose:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Configuración de Docker

  1. Verifica la instalación de Docker:
sudo docker run hello-world
  1. Agrega tu usuario al grupo Docker para ejecutar comandos de Docker sin sudo:
sudo usermod -aG docker $USER
  1. Configura Docker para que se inicie automáticamente al arrancar el sistema:
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
  1. (Opcional) Configura Docker para usar un controlador de almacenamiento diferente:
sudo vi /etc/docker/daemon.json

Agrega la siguiente configuración y guarda el archivo:

{
  "storage-driver": "overlay2"
}
  1. Reinicia el servicio Docker:
sudo systemctl restart docker

Instalación de Docker Compose

  1. Descarga la última versión de Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. Haz el binario ejecutable:
sudo chmod +x /usr/local/bin/docker-compose
  1. Verifica la instalación de Docker Compose:
docker-compose --version

Creación y Ejecución de Contenedores Docker

Creación de Imágenes Docker

  1. Crea un nuevo directorio para tu proyecto:
mkdir my-docker-project
cd my-docker-project
  1. Crea un archivo Dockerfile en el directorio del proyecto:
touch Dockerfile
  1. Abre el archivo Dockerfile y añade el siguiente contenido:
## Usa la imagen oficial de Ubuntu 22.04 como base
FROM ubuntu:22.04

## Actualiza el índice de paquetes e instala los paquetes necesarios
RUN apt-get update && apt-get install -y \
    nginx \
    curl \
    && rm -rf /var/lib/apt/lists/*

## Copia el archivo de configuración predeterminado de Nginx
COPY default.conf /etc/nginx/conf.d/

## Exponer el puerto 80 para Nginx
EXPOSE 80

## Inicia Nginx al arrancar el contenedor
CMD ["nginx", "-g", "daemon off;"]
  1. Crea un archivo de configuración predeterminado de Nginx default.conf:
server {
    listen 80;
    server_name example.com;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}
  1. Crea la imagen Docker:
docker build -t my-nginx-app .

Ejecución de Contenedores Docker

  1. Ejecuta el contenedor Docker:
docker run -d --name my-nginx-app -p 80:80 my-nginx-app
  1. Verifica que el contenedor se esté ejecutando:
docker ps
  1. Accede al servidor web Nginx que se ejecuta en el contenedor:
curl http://localhost

Administración de Contenedores Docker

  1. Detén el contenedor en ejecución:
docker stop my-nginx-app
  1. Inicia el contenedor detenido:
docker start my-nginx-app
  1. Elimina el contenedor:
docker rm my-nginx-app
  1. Elimina la imagen Docker:
docker rmi my-nginx-app

Docker Compose

  1. Crea un archivo docker-compose.yml:
version: '3'
services:
  web:
    build: .
    ports:
     - "80:80"
  1. Construye y ejecuta la aplicación Docker Compose:
docker-compose up -d
  1. Detén y elimina la aplicación Docker Compose:
docker-compose down

Resumen

Al finalizar este tutorial, tendrás una comprensión sólida de Docker y sus capacidades, así como las habilidades prácticas para crear, gestionar y ejecutar contenedores Docker en un sistema Linux. Este conocimiento te permitirá optimizar el despliegue de tus aplicaciones, mejorar la escalabilidad y mejorar tu flujo de trabajo general de DevOps.