🐋
Apuntes Sistemas
  • ⚓Presentación
  • 📊Sistemas y Servidores
    • Personalizar el prompt de Windows
    • Utilidad de manejo de apps para Windows
    • PRACTICA: Arranque dual Windows y Ubuntu
    • 🚧SysLinuxOS: el SO para ASIX
    • Comandos Linux
      • PRACTICA - Ejercicio de práctica comandos
      • 🚧Instalación de paquetes
      • Apuntes Linux: blue/red team
      • Ejemplos de bash
      • Listado de comandos de Linux
    • Comandos Windows
      • 🚧Apuntes Powershell
      • Bucles FOR con batch
      • Scripts de práctica de Windows
    • Prácticas con Windows 10
    • Configuración de netplan
    • Terminal shell
      • SSH
      • 🚧Ghostty
      • 🚧Warp: la terminal inteligente
      • tmux: paneles de terminal
      • Tabby: Mejorar terminal
      • Conexión SSH en red NAT con VirtualBox
      • TheFuck!: Corrección de comandos
      • Wave: Mejorar terminal Linux
      • 🚧Registros de sesiones
    • Instalación manual de Wordpress en CDMON
    • 🏗️Proxmox
    • 🚧TrueNAS
    • Docker
      • Instalación de Docker
      • Dockerfiles
      • Volúmenes de docker
      • Deployment web con Docker con ejemplos
        • 🚧PRACTICA: Node.js con docker
      • Docker Compose
        • Ejemplo 1: Implantación de Wordpress
        • Ejemplo 2: Implementación de servidor con Nginx, Flask y mySQL
        • Ejemplo 3: Implantación de onlyoffice
        • 🚧Ejemplo 4: Passbolt
        • 🚧PRACTICA: Creando una web de emulación de juegos con docker-compose
      • Monitorización con Grafana en Docker
      • Pi-hole con docker
      • Actividad clase: Deployment app
      • Proyectos self-hosted de docker
    • 🚧Ansible
      • Configuración de laboratorio de ansible
    • 🚧Monitorización de servicios y redes
      • Servicios y cronjobs
      • 1Panel
      • 🚧WatchYourLAN
      • 🚧Uptime-kuma
      • 🚧Netdata
      • 🚧Prometheus + Grafana + Loki
    • LDAP
      • 🚧Gestión gráfica de LDAP
      • Carpetas compartidas NFS
      • PRACTICA: Infraestructura LDAP
  • 🗃️Servicios
    • 🚧Servidor hosting público
    • DHCP
      • DHCP con Ubuntu
      • 🦖DHCP & DNS script
      • DHCP con Alpine
        • Alpine - configuración de red
    • DNS
      • 😡Comprobación DNS
      • Script para enumeración DNS
      • DNS con ubuntu server
      • 🏗️DNSmasq
      • 🚧Securizar servidor DNS
    • Web
      • IIS con Windows server
      • Apache
        • Instalación de LAMP en Ubuntu
          • Prueba de servidor LAMP
          • 🚧Configuración de seguridad de Ubuntu
          • Creación de un VirtualHost en LAMP
          • Creación de varios VirtualHosts en LAMP
          • 🚧Instalación por script de LAMP
        • Aplicaciones con LAMP
          • Instalación de WP en entorno LAMP
          • 🚧Instalación de MantisBT en LAMP
            • 👷Guía de MantisBT
          • 🚧Instalación de QDPM con LAMP
      • Nginx
        • Virtualhosts
        • Instalando Wordpress en nginx
      • 👷MEAN stack
      • 👷‍♂️Caddy
      • 🚧Plesk
      • 🚧Ajenti -Web interface
    • 🏗️Proxy
      • Nginx como proxy inverso y balanceador
      • 🚧Zoraxy
    • Mailing
      • 🚧Servidor Mail con cloudfare
      • 🚧Reenvío de correos de root
      • 🚧Roundcube como MUA
      • Comprobación ESMTP
      • 🚧Seguridad en mailing
      • 🚧Mailhog
    • 🏗️File transfer
      • 🚧FTP
      • Git
    • Sistemas de comunicación instantánea
      • Comunicación mediante CLI
      • Ejabberd - XMPP
        • 🚧Ejabberd con docker
      • 🚧Openfire - XMPP
      • 🚧Comunicaciones servidor-móvil
    • 🏗️Multimedia services
      • Stremio
      • Ver anime por CLI
      • Jellyfin
      • 🚧HLS sobre Apache
      • 🚧Servicio autohospedado de videoconferencia
      • 🚧Morphos: Conversor docs
      • 🚧Reproductores de música en CLI
      • 🚧Icecast - música en streaming
      • 🚧RTMP-HLS server
      • 🚧Guacamole
  • 🖱️Hardware
    • 🚧Identificando conectores
    • Curso de electrónica analógica
    • Alcanzar los 3200MHz con la RAM
    • Calculadora de cuellos de botella
    • 🚧PXE: Bootear sistemas en red
    • 🚧PRÁCTICA - Clonación de disco con Clonezilla
    • Logitech iFixit
  • 🕸️Redes
    • Apuntes IPv4 Alina
    • ¿Cómo diferenciar tantos elementos de red?
    • 🚧IPv6
    • PRÁCTICA - Subneteo con IPcalc en Linux
    • PRÁCTICA - Comandos de red en Windows
    • 🚧PRÁCTICA - Comandos de red en Linux
    • Herramientas de red
      • 🚧TCPDump: analizado de paquetes en red
      • PRÁCTICA - Netsh
      • 🚧PRÁCTICA - mtr.ping.pe
      • 🚧Netcat
    • Wireshark
    • VPN y escritorio remoto
      • Comunicación punto a punto con ngrok
      • 🚧VPN
    • Escaneo de red
      • PRÁCTICA - Mapeado de red con Draw.io
      • 🚧PRÁCTICA - Nmap/Zenmap
    • Redes inalámbricas
      • Wi-fi
        • 🚧PRÁCTICA - Configuración de router
        • 🚧PRÁCTICA - Como hacer un Wifi Heatmap
        • 🚧Seguridad de redes inalámbricas
        • PRÁCTICA - Crackear la contraseña del Wifi con WPA/WPA2
    • PRÁCTICA - Usar SSH en Cisco packet tracer
  • 🛑Ciberseguridad
    • 🚧Securizando un servidor Linux
      • Protégete de ataques de fuerza bruta con Fail2ban
      • Firewall
        • UFW (uncomplicated firewall)
          • GUFW - Interfaz gráfica de ufw
        • 🚧IPTables
        • 🚧PFsense
          • 🚧DMZ con PFsense
      • 🚧Passbolt: gestor de contraseñas autohospedado
      • 🚧Hashes y encriptación
      • 🚧Certificados SSL/TLS
      • Copias de seguridad
    • 🚧Alerta de escaneo de puertos
    • 🚧Google dorks
    • 🚧Enumeración DNS
    • Comandos destructivos de linux
    • Webs enseñanza cyber
    • Wireless Pentesting CheatSheet Github
    • The password game!
    • Personal Security Checklist
  • 🔌Arduino
    • Termómetro e higrómetros digitales y online con Arduino
    • Construyendo un coche multipropósito
      • Multi
      • Montaje del auto
    • Arduino con Sigfox para IoT
    • 10 proyectos de Arduino
  • 📚Recursos y libros
    • Media library: libros varios
    • Herramientas básicas de sysadmin
  • 🌍Sostenibilidad y digitalización
    • Portfolio curso digitalización MOOC
    • 🚧Explotación de recursos por IA
    • 🚧Nuevas tecnologias y comunicaciones
    • 🚧Enlaces sobre Inteligencia artificial
Con tecnología de GitBook
En esta página
  • ¿Qué es Docker?
  • Docker Engine
  • Dockerfile, imagen de Docker y contenedor de Docker
  • Docker registry
  • Docker networking
  • Listado de comandos Docker
  • Comandos de Docker-image
  • Comandos de Docker-Hub
  • Listado de parámetros de Docker
  • Ejemplo de uso
  • Arquitectura de microservicios
  1. Sistemas y Servidores

Docker

Con la irrupción de la nube y los servidores cloud, Docker apareció como una solución que permite crear en un ordenador zonas aisladas donde se ejecutan aplicaciones.

AnteriorTrueNASSiguienteInstalación de Docker

Última actualización hace 5 meses

¿Qué es Docker?

Docker es una plataforma de código abierto para desarrollar, enviar y ejecutar aplicaciones. Es una tecnología que permite incorporar y almacenar su código y sus dependencias en un pequeño paquete llamado imagen.

Docker Engine

Docker funciona por un aislamiento a nivel de kernel de sistema. Al compartir el kernel y las librerias, conseguimos que al ejecutar las máquinas consuman poco. Los recursos usados para conseguir ese aislamiento son cgroups y namespaces.

Docker-engine es la aplicación cliente-servidor y tiene 3 componentes:

  • Docker Daemon

  • Una REST API que nos permite comunicarnos con el Docker daemon o con otros softwares

  • Una interfaz de línea de comandos (CLI) con la que utilizamos el servicio (comando docker).

Dockerfile, imagen de Docker y contenedor de Docker

Docker file:

Un Dockerfile es un archivo de texto que contiene una colección de comandos o procedimientos. Considera este archivo como un script que define cómo se construirá nuestra imagen de contenedor.

Docker image:

Una docker image es una instancia ejecutable y empaquetada de una aplicación o entorno. Parecido a una iso, contiene todo lo necesario para ejecutar un software (o un sitio web en nuestro caso), incluido el código, un tiempo de ejecución, bibliotecas, variables de entorno y archivos de configuración. Una imagen acoplable es una plantilla de solo lectura para crear contenedores. En resumen:

  • Plantilla de solo lectura

  • Sistema de ficheros y parámetros listos para ejecutar

  • Basadas en sistemas operativos Linux

Docker container:

Un docker container es un paquete de software ejecutable, liviano e independiente que incluye todo lo necesario para ejecutar el software. Los contenedores aíslan las aplicaciones entre sí y de la infraestructura subyacente, al tiempo que proporcionan una capa adicional de protección para la aplicación. La contenederización resuelve el problema relacionado con la implementación y la escalabilidad de las aplicaciones, ayuda a promover la coherencia y la eficiencia en el desarrollo y las operaciones de software. En resumen:

  • Instancia de una imagen

  • Es un directorio dentro del sistema, similar a los “jail root”

  • Pueden ser ejecutados, reiniciados, parados...

Docker registry

El registro de Docker es un servicio que permite almacenar imágenes, estos registros pueden ser públicos o privados.

Docker networking

Docker ofrece una serie de funcionalidades de red:

  1. Mapeo de puertos

  2. Comunicación container-container

  3. Resolución DNS o uso de DNS externo

  4. Inspección de redes

  5. Reglas de firewall

  6. Integración con Plugins de red

  7. Soporte IPv6

Cuando se instala Docker, crea tres redes automáticamente: Bridge, Host y None. De los cuales, Bridge es la red predeterminada a la que se conecta un contenedor cuando se ejecuta. Para adjuntar el contenedor a cualquier otra red, puede usar el indicador --network del comando ejecutar.

Los adaptadores de red de docker son:

  • Bridge network: El modo de red predeterminado en Docker permite que los contenedores se comuniquen dentro del mismo host. Por ejemplo dos contenedores compartiendo información.

  • Controlled bridge network: Crear redes aisladas para contenedores, controlando la conectividad. Por ejemplo, para aislar contenedores para diferentes aplicaciones.

  • Host network: Los contenedores comparten la red del host, lo que hace que se comporten como procesos nativos lo cual mejora el rendimiento de la red pero crea menos aislamiento.

  • Overlay network: Permite la comunicación entre contenedores que se ejecutan en diferentes hosts Docker. Por ejemplo, la creación de un servicio Swarm de múltiples hosts.

  • MACVLAN: Proporciona contenedores con direcciones MAC e IP únicas en la red física. Por ejemplo, contenedores expuestos directamente en una red.

Para revisar la configuración de red:

 docker network inspect bridge

Para más info sobre container networking mirate el siguiente artículo:

Listado de comandos Docker

Algunos comandos útiles de docker:

Comando
Descripción

docker images

Listado de imágenes

docker history <nombre>

Muestra el historial de la imagen

docker ps

Listado de contenedores activos.

docker inspect <nombre>

Revisamos las propiedades del contenedor

docker container ls -a

Listado de todos los contenedores (aunque estén parados).

docker exec -it [CONTAINER ID] [comando]

Ejecuta un comando en el contenedor.

docker exec -it [CONTAINER ID] sh

Conecta al shell del contenedor

docker container restart [CONTAINER ID]

Reinicia un contenedor.

docker stats

Métricas de los contenedores.

docker container stop [CONTAINER ID]

Parada de un contenedor.

docker logs [CONTAINER ID]

Permite ver los logs asociados al contenedor.

Comandos de Docker-image

Comando
Descripción

docker build -t <image_name>

Construir una imagen a partir de un archivo docker

docker build -t <image_name> . -no-cache

Construir una imagen de Dockerfile sin la caché

docker images

Listar las imagenes locales

docker rmi <image_name>

Borrar imagen de Docker

docker image prune

Borrar todas las imagenes no usadas

Comandos de Docker-Hub

Comando
Descripción

docker login -u <username>

Login al hub

docker push <username>/<image_name>

Publicar una imagen al Docker Hub

docker search <image_name>

Buscar una imagen en el hub

docker pull <image_name>

Pull una imagen del Docker Hub

docker push <image_name>

Push una imagen del Docker Hub

docker logout

Logout del Hub

Comandos de contenedores

Comando
Descripción

docker run --name <container_name> <image_name>

Crear y ejecutar un contenedor a partir de una imagen con un nombre customizado.

docker run -p <host_port>:<container_port> <image_name>

Ejecutar un contenedor y publicarlo con los puertos del host

docker run -d <image_name>

Ejecutar un contenedor en segundo plano

docker start stop <container_name> (or <container-id>)

Arrancar o parar un contenedor existente

docker rm <container_name>

Eliminar un contenedor parado

docker exec -it <container_name> sh

Abrir una terminal dentro del contenedor ejecutado

docker logs -f <container_name>

Recuperar y seguir los logs de un contenedor

docker inspect <container_name> (or <container_id>)

Inspeccionar un contenedor en ejecución

docker ps

Listar los contenedores actuales

docker ps --all

Listar todos los contenedores, incluidos los parados

docker container stats

Ver estadísticas de uso de recursos de los contenedores

Listado de parámetros de Docker

Los parámetros más utilizados de terminal son:

Parámetro
Descripción

-d

Inicia un contenedor como proceso en segundo plano (background).

-it

Conecta a un contenedor de forma interactiva

--rm

Borra el contenedor cuando se pare.

-p

Mapea un puerto del host a un puerto del contenedor.

--mount

Crea un volumen persistente controlado por Docker

-v

Monta un directorio compartido entre el host y el contenedor

-e

Define una variable de entorno.

Ejemplo de uso

Vamos a buscar y descargar la imagen de hello-world de Docker Hub

docker search httpd
docker pull httpd

Podemos ver la imagen directamente en:

docker images

A continuación vamos a ejecutarla con una serie de parámetros:

docker run -d -p 8000:80 --name contenedor-de-alex httpd

Para revisar que esta ejecutándose podemos verlo en:

docker ps

Para acceder al contenido de la imagen accedemos a través de la ip local con el puerto especificado antes:

http://192.168.1.20:8000

Si necesitáramos pararlo o reanudarlo ahora:

docker stop contenedor-de-alex
docker start contenedor-de-alex

Y para borrarlo:

docker rm contenedor-de-alex


Arquitectura de microservicios

𝗦𝗲𝗹𝗳-𝗰𝗼𝗻𝘁𝗮𝗶𝗻𝗲𝗱 𝗦𝘆𝘀𝘁𝗲𝗺𝘀 (𝗦𝗖𝗦) es un enfoque de arquitectura de software que prioriza la descentralización de aplicaciones en sistemas independientes, cada uno con su lógica de dominio, UI y almacenamiento de datos.

A diferencia de los microservicios, servicios más pequeños centrados únicamente en la lógica empresarial, los SCS son más grandes y abarcan un alcance más amplio dentro de un dominio específico. SCS son sistemas que representan 𝗮𝘂𝘁𝗼𝗻𝗼𝗺𝗼𝘂𝘀 𝘄𝗲𝗯 𝗮𝗽𝗽𝗹𝗶𝗰𝗮𝘁𝗶𝗼𝗻𝘀, que incluyen interfaz de usuario web, lógica de negocios y base de datos, y podría tener una API de servicio.

Las principales ventajas de dichos sistemas son:

  1. Autonomía: cada SCS opera de forma independiente con su base de datos, lógica empresarial e interfaz de usuario.

  2. Alineado con dominios: SCS está estructurado en torno a dominios comerciales específicos, lo que garantiza que cada unidad represente un conjunto de funcionalidades coherente y significativo.

  3. Gestión de la información descentralizada: las bases de datos individuales por SCS garantizan la coherencia de los datos dentro su límite, reduciendo las dependencias entre servicios.

  4. Diversidad de tecnología: permite utilizar diferentes pilas de tecnología en otros SCS, satisfaciendo las necesidades específicas de cada dominio.

  5. Interfaces correctas: Interfaces bien definidas para interacciones con otros sistemas, manteniendo un contrato claro y preservando la encapsulación.

  6. Actualización completa: cada SCS se puede implementar, escalar y actualizar de forma independiente sin afectar a otros sistemas.

Referencias:

Diferencia

Es el caso del registro oficial de Docker:

La información sobre redes entre contenedores la tienes .

Más información sobre el funcionamiento puedes encontrarla aquí:

https://hub.docker.com/
aquí
https://towardsdatascience.com/docker-networking-919461b7f498
https://dev.to/ruslangonzalez/argumentos-y-variables-de-entorno-en-docker-j9o
https://twitter.com/devops_tech/status/1678617959890292737
https://twitter.com/devops_tech/status/1732440148825215358
https://aulasoftwarelibre.github.io/taller-de-docker/
📊
Page cover image
How Container Networking Works: a Docker Bridge Network From Scratch | iximiuz Labsiximiuz Labs
Logo
docker version
Ejemplo de red de contenedores
Cheatsheet
Esquema de tipos de arquitectura de sistemas