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
- Imágenes construidas automáticamente:
docker search --filter "is-automated=true" nombre_imagen
- 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