Docker: Conceptos Fundamentales y Práctica Avanzada

Conceptos Básicos

Mecanismo de Sandbox

El mecanismo de sandbox es un entorno virtual que proporciona independencia total para cada aplicación que se ejecuta dentro de él. Esta tecnología garantiza que las aplicaciones operen en un aislamiento completo sin afectar al sistema anfitrión.

Características principales:

  • Aislamiento total entre aplicaciones concurrentes
  • Seguridad mejorada para ejecución de software de riesgo
  • Capacidad para analizar malware en entorno controlado

¿Qué es Docker?

Docker es un motor de contenedores de aplicaciones de código abierto, desarrollado en el lenguaje Go y bajo licencia Apache 2.0. Su propósito es permitir a los desarrolladores empaquetar sus aplicaciones junto con todas sus dependencias en contenedores ligeros y portátiles.

Estos contenedores operan mediante el mecanismo de sandbox, ofreciendo un alto grado de aislamiento similar a las aplicaciones de iOS, pero con un overhead de recursos mínimo.

Ventajas de los contenedores Docker:

  • Inicio extremadamente rápido
  • Consumo reducido de recursos del sistema

Imágenes

Las imágenes son plantillas de solo lectura que se utilizan para crear contenedores. Pueden considerarse como discos duros o instalaciones de sistema operativo preconfiguradas.

Repositorios

Los repositorios son lugares centralizados donde se almacenan y distribuyen imágenes Docker.

Operaciones Básicas con Imágenes

Obtener imágenes del repositorio

Buscar imágenes:

docker search nombre_imagen

Filtrar resultados de búsqueda:

  • Imágenes oficiales:
docker search --filter "is-official=true" nombre_imagen
  1. Imágenes construidas automáticamente:
docker search --filter "is-automated=true" nombre_imagen
  1. Imágenes con calificación mínima:
docker search --filter stars=3 nombre_imagen

Descargar imágenes:

docker pull nombre_imagen

Ver imágenes locales

docker images

Eliminar imágenes locales

docker rmi nombre_imagen

Operaciones Básicas con Contenedores

Crear contenedores

docker run -itd --name=nombre_contenedor nombre_imagen

Explicación de parámetros:

  • -i: Ejecuta el contenedor en modo interactivo
  • -d: Ejecuta el contenedor en segundo plano y devuelve el ID del contenedor
  • -t: Asigna un pseudo-TTY al contenedor
  • --name: Asigna un nombre específico al contenedor

Ver contenedores en ejecución

docker ps

Ver todos los contenedores (incluidos los detenidos)

docker ps -a

Detener contenedores

docker stop nombre_contenedor/id_contenedor

Iniciar contenedores

docker start nombre_contenedor/id_contenedor

Reiniciar contenedores

docker restart nombre_contenedor/id_contenedor

Eliminar contenedores

docker rm nombre_contenedor/id_contenedor

Modificación y Guardado de Contenedores

Entrar en un contenedor

docker exec -it nombre_contenedor/id_contenedor /bin/bash

Salir del contenedor

exit

Guardar modificaciones como nueva imagen

docker commit -a "autor" -m "mensaje" id_contenedor nuevo_nombre_imagen:etiqueta

Parámetros:

  • -a: Especifica el autor (opcional)
  • -m: Proporciona información sobre las modificaciones realizadas
  • id_contenedor: ID del contenedor modificado
  • nuevo_nombre_imagen: Nombre para la nueva imagen
  • etiqueta: Etiqueta para la nueva imagen (opcional, por defecto es "latest")

Operaciones Avanzadas con Contenedores

Mapeo de puertos

El mapeo de puertos permite conectar puertos del contenedor con puertos del sistema anfitrión:

docker run -itd -p puerto_anfitrión:puerto_contenedor nombre_imagen

Montaje de archivos

El montaje de archivos permite compartir directorios entre el sistema anfitrión y el contenedor:

docker run -itd -v /directorio/anfitrión:/directorio/contenedor nombre_imagen

Copiar archivos entre contenedor y sistema enfitrión

Copiar archivo del contenedor al sistema anfitrión:

docker cp nombre_contenedor:/directorio/contenedor/archivo /directorio/anfitrión/archivo

Copiar archivo del sistema anfitrión al contenedor:

docker cp /directorio/anfitrión/archivo nombre_contenedor:/directorio/contenedor/archivo

Conexión entre contenedores

Conectar contenedores para que puedan comunicarse entre sí:

docker run -itd --link nombre_contenedor_origen:alias_en_contenedor_destino nombre_imagen_destino

Modificación de contraseñas de MySQL

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'nueva_contraseña';

Dockerfile

¿Qué es un Dockerfile?

Un Dockerfile es un archivo de texto que contiene instrucciones de Linux. Docker lee estas instrucciones para construir imágenes personalizadas.

Estructura de un Dockerfile

Un Dockerfile generalmente consta de cuatro partes:

  • Información de la imagen base
  • Información del mantenedor
  • Instrucciones de construcción de la imagen
  • Instrucciones de ejecución al iniciar el contenedor

Los comentarios en Dockerfile se indican con el símbolo #.

Construir una imagen a partir de Dockerfile

docker build -t nombre_imagen:etiqueta .

Para especifiacr una ubicación diferente del Dockerfile:

docker build -f /ruta/Dockerfile .

Comandos principales de Dockerfile

FROM

Especifica la imagen base. Debe ser el primer comando del Dockerfile.

FROM nombre_imagen
FROM nombre_imagen:etiqueta
FROM nombre_imagen@hash_digest

MAINTAINER

Establece la información del mantenedor.

MAINTAINER nombre_mantenedor

RUN

Ejecuta comandos durante la construcción de la imagen.

RUN comando
RUN ["ejecutable", "parametro1", "parametro2"]

ADD

Copia archivos del sistema anfitrión al contenedor. Descomprime automáticamente archivos tar.

ADD origen... destino

COPY

Copia archivos del sistema anfitrión al contenedor. Similar a ADD pero sin descompresión automática.

COPY origen... destino

CMD

Especifica el comando predeterminado que se ejecuta al iniciar el contenedor.

CMD ["ejecutable", "parametro1", "parametro2"]
CMD ["parametro1", "parametro2"]
CMD comando parametro1 parametro2

ENTRYPOINT

Configura el contenedor para que sea ejecutable. Permite sobrescribir el comando predeterminado.

ENTRYPOINT ["ejecutable", "parametro1", "parametro2"]
ENTRYPOINT comando parametro1 parametro2

EXPOSE

Expone puertos para que puedan ser accesibles desde fuera del contenedor.

EXPOSE puerto [puerto...]

VOLUME

Crea puntos de montaje para datos persistentes.

VOLUME ["/ruta/directorio"]

WORKDIR

Establece el directorio de trabajo para las instrucciones siguientes.

WORKDIR /ruta/directorio

USER

Especifica el usuario con el que se ejecutan las instrucciones siguientes.

USER usuario
USER usuario:grupo
USER uid
USER uid:gid

ARG

Define variables pasadas en tiempo de construcción.

ARG nombre [=valor_predeterminado]

ONBUILD

Especifica instrucciones que se ejecutarán cuando la imagen se use como imagen base para otra construcción.

ONBUILD INSTRUCCION

Etiquetas: Docker contenedores virtualización DevOps

Publicado el 7-4 04:40