Thanks to visit codestin.com
Credit goes to github.com

Skip to content

devdevbadillo/docker_theory

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 

Repository files navigation

Docker

Tabla de Contenido

Introducción a Docker

¿Qué es Docker?

Docker es una plataforma de código abierto que utiliza la tecnología de contenedores para automatizar la implementación, escalado y gestión de aplicaciones. Fundamentalmente, Docker permite empaquetar una aplicación junto con todas sus dependencias, bibliotecas, configuraciones y archivos del sistema en una unidad portable llamada contenedor.

¿Por qué usar Docker?

  1. Problema de dependencias ("Dependency Hell") Tradicionalmente, las aplicaciones tenían conflictos de dependencias cuando se ejecutaban en el mismo sistema. Docker resuelve esto encapsulando cada aplicación con sus propias dependencias.

  2. Inconsistencias entre entornos El famoso problema "funciona en mi máquina" surge por diferencias entre entornos de desarrollo, pruebas y producción. Docker garantiza consistencia mediante la contenedorización.

  3. Ineficiencia de recursos Las máquinas virtuales consumen muchos recursos. Docker es más eficiente al compartir el kernel del host.

Beneficios Clave (Consistencia, Aislamiento, Portabilidad, Escalabilidad)

  1. Consistencia y Portabilidad: Una vez que una aplicación está en un contenedor Docker, funcionará de la misma manera en cualquier sistema que tenga instalado Docker. Esto elimina los problemas de configuración de dependencias y versiones de software.

  2. Aislamiento y Seguridad: Cada contenedor se ejecuta de forma aislada, lo que significa que no puede interferir con otros contenedores o con el sistema operativo anfitrión. Esto mejora la seguridad y la estabilidad, ya que un fallo en un contenedor no afectará al resto.

  3. Escalabilidad: Docker facilita la escalabilidad horizontal. Puedes lanzar múltiples instancias de un mismo contenedor de manera rápida y eficiente para manejar picos de tráfico. Herramientas como Docker Swarm o Kubernetes se construyen sobre esta base para gestionar y orquestar cientos o miles de contenedores.

Docker vs. Máquinas Virtuales

Conceptos Fundamentales

Imagen (Image): Es una plantilla de solo lectura que contiene las instrucciones para crear un contenedor. Imagínala como la "receta" para tu aplicación. Una imagen incluye el código de la aplicación, las bibliotecas, las dependencias y la configuración. Se construyen a partir de un Dockerfile.

Contenedor (Container): Es una instancia ejecutable de una imagen. Si la imagen es la receta, el contenedor es el "plato" cocinado. Un contenedor es una instancia aislada y en ejecución de una imagen. Puedes tener múltiples contenedores ejecutándose a partir de la misma imagen.

Dockerfile: Es un archivo de texto simple que contiene una serie de instrucciones para construir una imagen Docker. Especifica el sistema base, las dependencias a instalar, los archivos a copiar y el comando que se debe ejecutar al iniciar el contenedor. Es la forma de automatizar la creación de imágenes.

Docker Hub: Es un registro o repositorio público donde se pueden almacenar y compartir imágenes de Docker. Es como GitHub, pero para imágenes de contenedores. Los desarrolladores pueden subir sus imágenes y otros pueden descargarlas para usarlas en sus proyectos.

Imágenes de Docker

¿Qué es una Imagen de Docker?

Capas de Imágenes (Image Layers)

Registros de Imágenes (Registries)

Docker Hub

Registros Privados

Comandos Básicos de Imágenes

docker pull: Descargar Imágenes

docker images: Listar Imágenes

docker rmi: Eliminar Imágenes

docker history: Ver Historial de Capas

docker tag: Etiquetar Imágenes

docker push: Subir Imágenes

Contenedores de Docker

¿Qué es un Contenedor de Docker?

Ciclo de Vida de un Contenedor

Comandos Básicos de Contenedores

docker run: Crear y Ejecutar Contenedores

Modo Detached (-d)

Asignación de Puertos (-p)

Variables de Entorno (-e)

Volúmenes (-v)

Nombre del Contenedor (--name)

Ejecutar Comandos en el Contenedor

docker ps: Listar Contenedores

docker stop, docker start, docker restart: Controlar Contenedores

docker rm: Eliminar Contenedores

docker exec: Ejecutar Comandos en Contenedores en Ejecución

docker inspect: Inspeccionar Contenedores

docker logs: Ver Logs de Contenedores

docker top: Ver Procesos en Contenedor

docker cp: Copiar Archivos a/desde Contenedor

Dockerfile: Construyendo tus Propias Imágenes

¿Qué es un Dockerfile?

Instrucciones Clave del Dockerfile

FROM: Imagen Base

RUN: Ejecutar Comandos

CMD: Comando por Defecto

ENTRYPOINT: Punto de Entrada

COPY: Copiar Archivos/Directorios

ADD: Añadir Archivos/URLs

WORKDIR: Directorio de Trabajo

EXPOSE: Exponer Puertos

ENV: Variables de Entorno

ARG: Argumentos de Construcción

VOLUME: Puntos de Montaje de Volumen

USER: Usuario del Contenedor

HEALTHCHECK: Verificación de Salud

Proceso de Construcción (docker build)

Mejores Prácticas para Dockerfiles

Imágenes Base Ligeras

Minimizar Capas

Multi-Stage Builds

Caché de Construcción

Seguridad

Persistencia de Datos (Volúmenes)

¿Por qué la Persistencia?

Tipos de Volúmenes

Volúmenes Nombrados (Named Volumes)

Creación y Gestión (docker volume)

Bind Mounts

tmpfs Mounts

Uso de Volúmenes en Contenedores

Inspeccionar Volúmenes

Casos de Uso Comunes

Redes en Docker

Conceptos de Redes de Contenedores

Tipos de Redes

bridge (Por Defecto)

host Network

none Network

overlay Network (para Swarm)

Crear Redes Personalizadas (docker network create)

Conectar Contenedores a Redes

DNS en Docker

Publicación de Puertos (-p, --publish)

Vínculo entre Contenedores (--link - Legado)

Docker Compose: Orquestación Local

¿Qué es Docker Compose?

Archivo docker-compose.yml

Versiones del Formato

Servicios (services)

Redes (networks)

Volúmenes (volumes)

Comandos Básicos de Compose

docker compose up: Levantar Aplicaciones

docker compose down: Bajar Aplicaciones

docker compose ps: Listar Servicios

docker compose logs: Ver Logs

docker compose exec: Ejecutar Comandos

docker compose build: Reconstruir Imágenes

Casos de Uso de Docker Compose

Docker Hub y Registros de Contenedores

Docker Hub: El Registro por Defecto

Cuentas y Repositorios

Automatización de Builds (Automated Builds)

Registros Privados (Private Registries)

Autenticación (docker login)

Seguridad en Docker

Principios de Seguridad de Contenedores

Imágenes Seguras

Minimizar la Superficie de Ataque

Escaneo de Vulnerabilidades

Contenedores Seguros

Principio de Menor Privilegio (Non-root user)

Restricción de Recursos (CPU, Memoria)

Capacidades de Linux (Capabilities)

Seccomp y AppArmor

Gestión de Secretos

Redes Seguras

Optimización de Rendimiento y Troubleshooting

Optimización de Rendimiento

Uso Eficiente de Recursos

Optimización de I/O

Caché de Capas de Dockerfile

Troubleshooting Común

Contenedores que no Inician

Problemas de Red

Problemas de Volumen

Errores de Construcción de Imágenes

Uso de docker events, docker system df, docker prune

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published