Fichero de ejecución para crear imágenes DockerFile
Este fichero tiene un formato específico y necesita, como mínimo, la instrucción FROM para indicar la imagen base a partir de la cual construiremos nuestra propia imagen personalizada.
¿Para qué sirve?
- La idea es partir de una imagen base y personalizarla según nuestras necesidades.
- Una vez creada la nueva imagen, podremos utilizarla para levantar contenedores.
Construcción del Dockerfile
Para ejecutar las instrucciones del Dockerfile, utilizamos el comando
docker build
:
|
|
Podemos usar la opción PATH para especificar la ubicación del Dockerfile.
Si el fichero tiene otro nombre , lo indicamos con la opción -f .
Instrucciones principales
- FROM: Establece la imagen base.
- RUN: Ejecuta comandos durante la construcción de la imagen.
- CMD: Especifica el comando predeterminado para el contenedor.
- LABEL: Añade metadatos a la imagen.
- EXPOSE: Define los puertos que se abrirán.
- ENV: Establece variables de entorno.
- COPY y ADD: Copian archivos al contenedor.
- WORKDIR: Define el directorio de trabajo.
- VOLUME: Crea un punto de montaje persistente.
- ENTRYPOINT: Establece el comando principal del contenedor.
- ARG: Declara argumentos para la construcción.
Ejemplo: Imagen base (FROM)
|
|
Esta instrucción es obligatoria y debe ser la primera, salvo comentarios o ARG .
Ejemplo: Ejecución de comandos (RUN)
Instalación de paquetes
Instalación de paquetes
Lo primero que debemos hacer es ejecutar apt-get update , lo que actualiza las cabeceras de los repositorios para garantizar que los paquetes disponibles estén actualizados.
Observa que se utiliza la opción -y para confirmar automáticamente las instalaciones, evitando la necesidad de interacción manual, algo que no está permitido durante la construcción del contenedor .
|
|
Ejecución de scripts
|
|
Cada instrucción RUN genera una capa.
Modificar una capa afecta a las siguientes, por lo que conviene agrupar comandos para optimizar.
Declaración de variables: ENV y ARG
ENV
|
|
ARG
|
|
Construcción con argumentos personalizados:
|
|
Ejemplo: Personalización con RUN
Podemos ejecutar comandos de administración, instalación y scripts predefinidos:
|
|
Práctica sugerida: Crear un Dockerfile
- Partir de la imagen base
ubuntu:latest. - Instalar los paquetes necesarios:
apache2vimgitzip
|
|
Declaración de variables: ENV vs ARG
Diferencias clave:
ENV: Define variables accesibles dentro del contenedor en tiempo de ejecución.ARG: Define argumentos disponibles solo durante la construcción de la imagen.
Ejemplo de uso: ARG
|
|
Construcción personalizada:
|
|
Ejemplo de uso: ENV
|
|
Solución de problemas: Instalación de PHP
Problema
Al instalar PHP, puede requerirse configurar la zona horaria (tzone), lo que interrumpe la construcción al no poder interactuar con el contenedor.

Solución
Configurar el entorno en modo no interactivo:
|
|
Configurar la zona horaria:
|
|
Etiquetas (LABEL)
Podemos agregar metadatos útiles a la imagen:
|
|
Ver etiquetas en el contenedor:
|
|
Gestión de archivos: COPY y ADD
Ejemplo: Crear usuarios desde un script
Archivos necesarios:
-
usuarios.txt:1 2 3 4 5maria nives luis lourdes manuel -
crea_usuarios.sh:1 2 3 4while IFS= read -r line do useradd -m $line -p $line done < usuarios.txt
Dockerfile:
|
|
Comandos: CMD y ENTRYPOINT
CMD
|
|
ENTRYPOINT
|
|
Ambos comandos definen lo que ejecutará el contenedor al iniciarse.
Volúmenes (VOLUME)
Define un volumen para la persistencia de datos. Es una instrucción declarativa que indica que, en los contenedores creados a partir de esta imagen, los datos ubicados en esta carpeta deberían almacenarse de forma persistente en un volumen.
|
|
Uso con variables de entorno:
|
|
Directorio de trabajo (WORKDIR)
Definir el directorio predeterminado:
|
|
Exponer puertos (EXPOSE)
Define los puertos que el contenedor utilizará para aceptar conexiones.
Es una
instrucción declarativa
(en una instrucción declarativa indicamos una intención, mientras que en una instrucción activa realizamos la acción real).
Indica qué puertos estarán disponibles dentro del contenedor, aunque no los publica automáticamente en el host.
Para hacerlos accesibles desde fuera, deben
mapearse explícitamente
al ejecutar el contenedor, por ejemplo con la opción -p.
|
|
Ejemplo de uso, (myimage sería la imagen generado por el Dockerfile anterior):
|
|
El contenedor escucha en el puerto 80, pero el acceso externo se realiza a través del 8080.
|
|
Extensiones de PHP en Docker (docker-php-ext-*)
Las imágenes oficiales de PHP incluyen herramientas para gestionar extensiones de forma sencilla.
Estas utilidades permiten compilar, activar, configurar o instalar extensiones adicionales directamente dentro del contenedor durante el proceso de construcción de la imagen.
De este modo, puedes añadir soporte para bases de datos (pdo_mysql, mysqli), gráficos (gd), internacionalización (intl), depuración (xdebug), cachés (redis, apcu) u otras librerías sin necesidad de compilar PHP manualmente.
Es una instrucción activa, ya que ejecuta acciones reales durante la construcción de la imagen (instala o habilita extensiones).
Comandos principales
| Comando | Función principal | Tipo |
|---|---|---|
docker-php-ext-install |
Compila e instala extensiones incluidas en el código fuente de PHP (por ejemplo pdo_mysql, gd, intl) |
Activa |
docker-php-ext-enable |
Activa extensiones ya instaladas, normalmente tras usar pecl install |
Activa |
docker-php-ext-configure |
Configura opciones previas a la compilación de una extensión | Activa |
pecl install |
Instala extensiones externas (no incluidas en el core de PHP) | Activa |
🧱 Ejemplo básico
|
|
🌍 Ejemplo con dependencias
|
|
💡 Notas
- Estas herramientas solo están disponibles en las imágenes oficiales de PHP (
php:8.3-apache,php:8.3-fpm, etc.). - Es recomendable limpiar la caché y combinar comandos en una sola capa para reducir el tamaño final de la imagen.
- Si la extensión no está incluida en PHP, puede instalarse mediante
pecl install nombrey activarse condocker-php-ext-enable.
👉 En resumen, estas utilidades facilitan la instalación y configuración de extensiones PHP durante la construcción de imágenes Docker, de forma similar a cómo apt-get install gestiona paquetes del sistema.
Conclusión
Resumen
- Sabemos crear imágenes personalizadas con Dockerfile.
- Sabemos usar instrucciones clave como
RUN,CMD,ENTRYPOINTy más. - Aprendimos a gestionar volúmenes y persistencia de datos.
- Configuramos variables de entorno y puertos expuestos.
- Sabemos subir y gestionar imágenes en Docker Hub.