Alpine Linux

 Alpine Linux es una distribución de Linux extremadamente ligera y segura, diseñada específicamente para entornos containerizados como Docker.

Características principales de Alpine:

  • Tamaño mínimo: La imagen oficial de Alpine ocupa solo ~5MB

  • Seguridad: Diseñada con seguridad en mente, superficie de ataque reducida

  • Rendimiento: Arranque rápido y consumo mínimo de recursos

  • Basada en musl libc: En lugar de glibc, lo que la hace más ligera

  • Gestor de paquetesapk (Alpine Package Keeper)

Por qué se usa Alpine en Docker:

bash
# Comparación de tamaños:
alpine:latest    ≈ 5MB
ubuntu:latest    ≈ 70MB
debian:latest    ≈ 120MB
centos:latest    ≈ 200MB

En tu ejemplo:

bash
# Alpine - muy ligero
docker run alpine echo "Hola Mundo desde Docker!"

# Ubuntu - más pesado pero más compatible
docker run ubuntu echo "Hola Mundo desde Docker con Ubuntu!"

Ventajas de usar Alpine:

  • Descargas más rápidas

  • Menos consumo de disco

  • Menor exposición a vulnerabilidades

  • Ideal para microservicios y aplicaciones minimalistas

Desventajas:

  • Algunas aplicaciones pueden no ser compatibles con musl libc

  • Menos paquetes disponibles comparado con Ubuntu/Debian

Alpine es la opción preferida 


Esos ejemplos son didácticos, no de uso real

Esos comandos son solo para demostración del concepto básico de Docker, pero no representan un uso real en producción.

¿Qué está pasando realmente en esos ejemplos?

bash
# Esto NO es "contenerizar Alpine"
docker run alpine echo "Hola Mundo"

# Lo que realmente hace:
# 1. Descarga imagen alpine (si no existe)
# 2. Crea contenedor temporal
# 3. Ejecuta el comando `echo`
# 4. El contenedor se detiene (porque echo termina)

Uso real vs. Ejemplo didáctico

❌ Ejemplo didáctico (poco útil):

bash
docker run ubuntu echo "Hola Mundo"
# Descarga 70MB solo para ejecutar un echo

✅ Uso real (en producción):

dockerfile
# Dockerfile real para una aplicación
FROM node:18-alpine

WORKDIR /app
COPY package*.json ./
RUN npm install

COPY . .
CMD ["npm", "start"]

Casos reales donde SÍ usarías alpine o ubuntu directamente:

1. Debugging o troubleshooting:

bash
# Para inspeccionar problemas
docker run -it --rm alpine sh
docker run -it --rm ubuntu bash

2. Scripting o tareas temporales:

bash
# Procesar archivos temporalmente
docker run --rm -v $(pwd):/data alpine sh -c "cd /data && process-files.sh"

3. Como base para tu Dockerfile:

dockerfile
FROM alpine
RUN apk add --no-cache python3
COPY app.py .
CMD ["python3", "app.py"]

En resumen:

  • Sí, es raro hacer docker run alpine/ubuntu directamente en producción

  • Sí, es común usar alpine/ubuntu como base en Dockerfiles

  • Los ejemplos de "Hola Mundo" son solo educativos

  • En la vida real, contenerizas aplicaciones, no SOs completos

Tu intuición es correcta: No tiene sentido práctico crear contenedores solo para ejecutar comandos básicos en un SO.

El Dockerfile que muestras ya está usando una base específica, solo que no es visible directamente.

¿Qué pasa en tu ejemplo?

dockerfile
FROM php:8.2-fpm
# Esta imagen YA tiene un sistema base incluido

La imagen php:8.2-fpm está construida sobre alguna base (probablemente Debian), por eso puedes usar apt-get.

Para saber qué base usa una imagen:

bash
# Inspeccionar la imagen
docker image inspect php:8.2-fpm | grep -A5 "RootFS"

# O ejecutar y verificar
docker run --rm php:8.2-fpm cat /etc/os-release

Diferentes variantes de la misma imagen:

dockerfile
# Diferentes bases para la misma versión de PHP:

# 1. Basada en Debian (default) - usa apt-get
FROM php:8.2-fpm
RUN apt-get update && apt-get install -y git

# 2. Basada en Alpine - usa apk
FROM php:8.2-fpm-alpine
RUN apk add --no-cache git

# 3. Basada en Ubuntu
FROM php:8.2-fpm-bullseye

En tu caso específico:

dockerfile
FROM php:8.2-fpm
# Esta imagen probablemente usa Debian como base
# Por eso FUNCIONA apt-get

RUN apt-get update && apt-get install -y \
    git \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev

¿Cuándo SÍ especificar el sistema?

Cuando quieres control explícito:

dockerfile
# Opción 1: Quieres máxima ligereza
FROM php:8.2-fpm-alpine
RUN apk add --no-cache \
    git \
    curl

# Opción 2: Quieres máxima compatibilidad  
FROM php:8.2-fpm
RUN apt-get update && apt-get install -y \
    git \
    curl

Resumen:

  • No es obligatorio especificar el sistema

  • La imagen base ya decide el sistema subyacente

  • Tu Dockerfile actual está bien como está

  • Solo especifica -alpine si necesitas esa variante específica

Comentarios

Entradas más populares de este blog

ejercicios-Crear Carpeta y Archivo de Texto en Ubuntu

Tutorial de Carpetas y Directorios en Ubuntu Linux

Instalar Docker en Ubuntu Server usando docker.io