Docker والـ Containerization: المفاهيم básicos y el uso
Docker ي package las aplicaciones en contenedores para un deployment consistente y portátil. يغطي هذا الدليل fundamentals de Docker y escritura de Dockerfile y gestión de contenedores.
آخر تحديث:ما هو Docker؟
Docker هو plataforma that empacqueta aplicaciones y sus dependencias en contenedores. contenedores son entornos de ejecución ligeros y aislados.
VM vs Container: máquinas virtuales ejecutan sistema operativo completo (GBs). contenedores comparten kernel del SO host y ocupan MBs.
Consistencia: resuelve problema 'funciona en mi máquina'. entornos de desarrollo، prueba y producción usan mismo contenedor.
Portabilidad: contenedores funcionan en cualquier plataforma compatible con Docker (Linux، Windows، Mac، cloud).
المفاهيم fundamentales de Docker
Image: plantilla para un contenedor. almacenada como capas de solo lectura. construida a partir de un Dockerfile.
Container: instancia en ejecución de una imagen. cada contenedor se ejecuta como un proceso aislado.
Dockerfile: archivo de texto que define cómo construir una imagen. contiene instrucciones como FROM، RUN، COPY، CMD.
Registry: repositorio que almacena y distribuye imágenes. Docker Hub es el registry público más popular.
Volume: almacenamiento usado para persistir datos del contenedor. los datos se conservan incluso si el contenedor se elimina.
escritura de Dockerfile
FROM node:18-alpine: use Node.js 18 (Alpine Linux) como imagen base. Alpine es una imagen base de tamaño pequeño.
WORKDIR /app: establezca el directorio de trabajo en /app. todos los comandos posteriores se ejecutan en este directorio.
COPY package*.json ./: copie package.json y package-lock.json. instale dependencias con RUN npm install.
COPY . .: copie todo el código fuente. cree el build de producción con RUN npm run build.
EXPOSE 3000: especifique que el contenedor escucha en el puerto 3000. defina el comando a ejecutar cuando el contenedor inicie con CMD ["npm"، "start"].
Comandos básicos de Docker
docker build -t myapp:1.0 .: construya la imagen desde Dockerfile. etiquete la imagen con nombre:versión usando -t.
docker run -p 3000:3000 myapp:1.0: ejecute el contenedor. mapee el puerto del host al puerto del contenedor con -p.
docker ps: liste los contenedores en ejecución. docker ps -a: liste todos los contenedores (incluyendo los detenidos).
docker stop <container_id>: detenga el contenedor. docker rm <container_id>: elimine el contenedor.
docker images: liste las imágenes locales. docker rmi <image_id>: elimine la imagen.
Docker Compose
Docker Compose es una herramienta para definir y gestionar aplicaciones multi-contenedor. configurado con archivo docker-compose.yml.
Servicios: cada servicio es un contenedor. defina servicios como web (frontend)، api (backend)، db (base de datos).
Volumes: defina volumes para persistencia de datos. networks: cree networks para comunicación entre servicios.
docker compose up: inicie todos los servicios. docker compose down: detenga y elimine todos los servicios.
docker compose up -d: ejecute en modo detached (segundo plano). docker compose logs -f: siga los logs.
Mejores prácticas
Imágenes pequeñas: use imágenes base Alpine o distroless. elimine dependencias de build de la imagen final con multi-stage build.
Layer caching: COPY dependencias (que cambian raramente) primero، código (que cambia frecuentemente) después. esto optimiza el build cache.
.dockerignore: ignore archivos innecesarios (node_modules، .git، logs). esto reduce el build context.
Seguridad: use usuario non-root en lugar de root. cree usuario con RUN adduser --disabled-password appuser.
Health check: use la instrucción HEALTHCHECK para realizar verificación de salud del contenedor. Docker reinicia automáticamente los contenedores unhealthy.