Docker
Docker es una plataforma de código abierto que permite la creación, despliegue y administración de aplicaciones dentro de contenedores. Los contenedores son entornos ligeros y aislados que agrupan una aplicación junto con todas sus dependencias, lo que facilita la portabilidad y la eficiencia del software. Docker se ha convertido en una de las tecnologías más populares debido a su capacidad para simplificar los procesos de desarrollo y despliegue de software en diferentes entornos.
Docker es altamente versátil y eficiente gracias a su enfoque en la contenedorización en lugar de la virtualización tradicional. En lugar de virtualizar un sistema operativo completo, Docker permite ejecutar múltiples contenedores sobre un solo núcleo del sistema operativo, compartiendo recursos como el kernel.
Aislamiento: Los contenedores funcionan en entornos aislados, lo que asegura que las aplicaciones no interfieran entre sí, incluso si se ejecutan en el mismo servidor.Portabilidad: Los contenedores Docker pueden ejecutarse en cualquier lugar, ya sea en el equipo local de un desarrollador, en servidores en la nube o en centros de datos on-premise, garantizando que funcionarán de manera consistente en diferentes entornos.Ligereza: A diferencia de las máquinas virtuales, los contenedores no necesitan un sistema operativo completo, lo que reduce el uso de recursos como CPU y memoria. Los contenedores son ligeros y se inician rápidamente.Escalabilidad: Docker facilita la creación de microservicios, lo que permite a las organizaciones escalar sus aplicaciones de manera modular. Cada microservicio se ejecuta en su propio contenedor y puede ser gestionado de forma independiente.

Componentes
Docker se compone de varios elementos clave que trabajan en conjunto para proporcionar un ecosistema eficiente para el desarrollo y la ejecución de aplicaciones en contenedores:
Docker Engine: Es el corazón de Docker. Se trata de un motor cliente-servidor que gestiona los contenedores. Consta de tres componentes:- ▱
Docker Daemon (dockerd): Es el servidor que se ejecuta en segundo plano y gestiona los contenedores. - ▱
API REST: Permite a las aplicaciones comunicarse con el Docker Daemon para realizar tareas como crear, eliminar y gestionar contenedores. - ▱
CLI (Interfaz de Línea de Comandos): La herramienta con la que los usuarios interactúan con Docker desde la terminal para ejecutar comandos. Imágenes Docker: Son plantillas inmutables que contienen el código de una aplicación y todas las dependencias necesarias para ejecutarla. Las imágenes se almacenan en registros, como Docker Hub o registros privados.Contenedores Docker: Son instancias ejecutables de imágenes de Docker. Cada contenedor se ejecuta de manera aislada en su propio entorno y utiliza recursos del sistema operativo anfitrión, lo que lo hace mucho más ligero que las máquinas virtuales.Dockerfile: Es un archivo de texto que contiene un conjunto de instrucciones para construir una imagen Docker. Define cómo debe ser creada la imagen, desde qué base parte, qué dependencias necesita y qué comandos se deben ejecutar.Docker Compose: Es una herramienta que permite definir y ejecutar aplicaciones multicontenedor. Mediante un archivo YAML, Docker Compose define cómo interactúan varios servicios dentro de una aplicación.Registros Docker (Docker Registry): Son repositorios donde se almacenan las imágenes. Docker Hub es el registro más utilizado, pero también se pueden configurar registros privados.

Comandos de Administración
Docker ofrece una amplia gama de comandos para gestionar contenedores y redes. A continuación, se describen algunos de los más útiles para tareas comunes de administración:
Listar contenedores
Crear e iniciar contenedores
En este ejemplo,
Este comando monta todo el sistema de archivos en el contenedor, permitiendo acceso completo a todo el sistema de archivos del host.
Detener y eliminar contenedores
Cambiar la IP de un contenedor
Conectar contenedores entre sí
Después de esto, ambos contenedores podrán interactuar a través de la red interna.
Listar, crear y eliminar redes
Administración de volúmenes
Este comando crea un nuevo volumen que puede ser montado en los contenedores para persistir datos.

Ejemplo
Para descargar la GUI de Docker en Windows o Mac, se debe ingresar a la web oficial de Docker y seguir las instrucciones específicas para cada plataforma.
Para instalar Docker CLI en Linux, sigue estos pasos básicos:
Docker Hub es un servicio basado en la nube que funciona como un repositorio central para imágenes Docker. Es una plataforma donde los desarrolladores pueden compartir, almacenar, y distribuir imágenes de contenedores que se pueden usar fácilmente en cualquier entorno que soporte Docker. Piensa en Docker Hub como un "centro de distribución" para aplicaciones y herramientas empaquetadas en contenedores Docker.
Puedes instalar Jenkins directamente desde Docker Hub usando un contenedor Docker. Jenkins tiene una imagen oficial en Docker Hub que puedes utilizar para configurar tu entorno de Jenkins de forma rápida y sencilla.
Para que Podman pueda buscar imágenes en Docker Hub, debes asegurarte de que Docker Hub esté configurado como un registro en tu sistema.
❏ Abre el archivo de configuración /etc/containers/registries.conf con tu editor de texto favorito, por ejemplo:
❏ Edita el archivo, y asegúrate de tener algo como esto bajo la sección [registries.search]:
❏ Verifica la instalación de Podman.
ryuzak1@ubuntu: ~
❏ Después de haber actualizado el archivo de configuración, puedes intentar nuevamente tirar la imagen de Jenkins:
ryuzak1@ubuntu: ~
❏ Para listar las imágenes disponibles en tu sistema después de descargar una imagen puedes usar el siguiente comando:
ryuzak1@ubuntu: ~
❏ Si quieres más información sobre una imagen en particular (como los detalles de sus capas y configuraciones), puedes usar este comando para ver detalles de una imagen específica:
ryuzak1@ubuntu: ~
Antes de intentar ejecutar la imagen, puedes hacer una prueba para ver si está lista:
❏ Este comando ejecutará un contenedor temporal basado en la imagen de Jenkins y te dará acceso a una terminal en el contenedor. Si esto funciona correctamente, significa que la imagen se ha descargado y está lista para ser utilizada.
ryuzak1@ubuntu: ~
❏ Para ejecutar Jenkins en un contenedor:
ryuzak1@ubuntu: ~
❏ Antes de intentar acceder a Jenkins, asegúrate de que el contenedor esté en ejecución:
ryuzak1@ubuntu: ~
Ahora que el contenedor está corriendo, Jenkins está disponible en el puerto 8080 de tu máquina host. Abre un navegador web y ve a la siguiente URL: http://localhost:8080
❏ Cuando accedas a Jenkins por primera vez, verás una pantalla de "Unlock Jenkins". Para desbloquearlo, necesitarás el password de administrador generado durante la instalación. Para obtener esta contraseña, ejecuta el siguiente comando para ver los logs del contenedor de Jenkins:
ryuzak1@ubuntu: ~
❏ Detener el contenedor:
ryuzak1@ubuntu: ~
❏ Sí, una vez que el contenedor ha sido detenido pero no eliminado, puedes volver a iniciarlo usando el comando start. Si solo lo detuviste con podman stop, puedes reiniciarlo de la siguiente manera:
ryuzak1@ubuntu: ~

Docker Compose
Docker Compose es una herramienta esencial en el ecosistema de Docker, diseñada para simplificar la definición, configuración y ejecución de aplicaciones compuestas por múltiples contenedores. Si Docker es la herramienta que permite crear y gestionar contenedores individuales, Docker Compose es la que permite orquestar varios contenedores que trabajan juntos para formar una aplicación completa.
Docker Compose es una herramienta que permite definir y gestionar aplicaciones multi-contenedor mediante un archivo de configuración en formato YAML (generalmente llamado docker-compose.yml). Este archivo describe los servicios, redes y volúmenes necesarios para que la aplicación funcione correctamente.
Con Docker Compose, puedes:
- Definir todos los componentes de tu aplicación (bases de datos, servidores web, APIs, etc.) en un solo archivo.
- Levantar y detener todos los servicios con un solo comando.
- Gestionar las dependencias entre contenedores.
- Simplificar el desarrollo, pruebas y despliegue de aplicaciones complejas.
Docker Compose es una herramienta poderosa para definir y ejecutar aplicaciones multi-contenedor. Sus componentes clave trabajan en conjunto para simplificar la gestión de aplicaciones complejas. Aquí están los componentes esenciales:
- ▱
Servicios: Cada servicio representa un contenedor en la aplicación. Por ejemplo, un servicio puede ser una base de datos, un servidor web o un microservicio. - ▱
Redes: Docker Compose permite definir redes personalizadas para que los contenedores se comuniquen entre sí de manera aislada. - ▱
Volúmenes: Los volúmenes permiten persistir datos fuera de los contenedores, lo que es útil para bases de datos o archivos de configuración. - ▱
Variables de entorno: Puedes definir variables de entorno para configurar los servicios sin modificar el archivo docker-compose.yml.
Ejemplo con Docker Compose
❏ Levanta los servicios con Podman Compose:
ryuzak1@ubuntu: ~
❏ Acceder a BloodHound:
Abre tu navegador web y accede a la interfaz de BloodHound: http://localhost:8888.
Inicia sesión en BloodHound:
- Usuario: admin
- Contraseña: Es proporcionada la primera vez que se inicia el servicio y debe ser cambiada una vez que se haya iniciado sesión en la interfaz.

❏ Recopilar datos con SharpHound:
- SharpHound es el recolector de datos oficial para BloodHound. Debes ejecutarlo en el entorno de Active Directory que deseas analizar.
- Descarga SharpHound desde el repositorio oficial de BloodHound: SharpHound GitHub
Esto generará archivos ZIP con los datos recopilados.
❏ Buscar caminos en BloodHound:
- En la interfaz de BloodHound, haz clic en el botón "Upload Data" (Cargar datos).
- BloodHound permite buscar caminos entre dos objetos (por ejemplo, un usuario y un grupo de administradores) para identificar posibles rutas de escalada de privilegios.
- Busca por un usuario del dominio (por ejemplo: NU_1055@BLAZORIZED.HTB).
- Haz clic en el objeto para seleccionarlo, en modo add to owned.
- En el panel de detalles del objeto seleccionado, busca la sección "Outbound Control Rights" (Derechos de Control Salientes).
- Utiliza la opción "Outbound Object Control", que es una relación clave en BloodHound, para identificar cómo un usuario o grupo puede tomar control sobre otros objetos en Active Directory.
En el siguiente enlace, se encuentra disponible un archivo zip diseñado específicamente para la ejecución de pruebas en un entorno de Active Directory. Este recurso ha sido meticulosamente elaborado para facilitar la simulación de escenarios complejos, permitiendo a los administradores y profesionales de TI evaluar la integridad, seguridad y rendimiento de sus implementaciones de Active Directory de manera controlada y precisa
