Compartir comentarios
Las respuestas se generan en base a la documentación.

Imágenes base

Todos los Dockerfiles comienzan a partir de una imagen base. Una base es la imagen que tu imagen extiende, y hace referencia al contenido de la instrucción FROM en el Dockerfile.

FROM debian

En la mayoría de los casos, no necesitas crear tu propia imagen base. Docker Hub contiene una amplia biblioteca de imágenes de Docker listas para ser usadas como base en tus compilaciones. Las Imágenes Oficiales de Docker cuentan con documentación detallada, promueven las mejores prácticas y se actualizan con regularidad. También existen imágenes de Editores Verificados por Docker, creadas por socios de publicación de confianza y verificadas por Docker.

Crear una imagen base

Si necesitas controlar por completo el contenido de tu imagen, puedes crear tu propia imagen base a partir de la distribución de Linux que elijas, o bien utilizar la base especial FROM scratch:

FROM scratch

La imagen scratch se utiliza habitualmente para crear imágenes mínimas que contengan estrictamente lo que la aplicación necesita. Consulta Crear una imagen base mínima utilizando scratch.

Para crear una imagen base de una distribución, puedes utilizar un sistema de archivos raíz empaquetado como un archivo tar e importarlo a Docker con docker import. El proceso para crear tu propia imagen base depende de la distribución de Linux que quieras empaquetar. Consulta Crear una imagen completa utilizando tar.

Crear una imagen base mínima utilizando scratch

La imagen reservada y mínima scratch sirve como punto de partida para compilar contenedores. Utilizar la imagen scratch indica al proceso de compilación que deseas que el siguiente comando del Dockerfile sea la primera capa del sistema de archivos en tu imagen.

Aunque scratch aparece en el repositorio de Docker en Docker Hub, no puedes descargarla (pull), ejecutarla ni etiquetar (tag) ninguna imagen con el nombre scratch. En su lugar, simplemente haces referencia a ella en tu Dockerfile. Por ejemplo, para crear un contenedor mínimo utilizando scratch:

# syntax=docker/dockerfile:1
FROM scratch
ADD hello /
CMD ["/hello"]

Asumiendo que existe un ejecutable binario llamado hello en la raíz del contexto de compilación. Puedes compilar esta imagen de Docker utilizando el siguiente comando docker build:

$ docker build --tag hello .

Para ejecutar tu nueva imagen, utiliza el comando docker run:

$ docker run --rm hello

Esta imagen de ejemplo solo se ejecutará con éxito si el binario hello no tiene dependencias en tiempo de ejecución. Los programas informáticos suelen depender de otros programas o recursos para existir en el entorno de ejecución. Por ejemplo:

  • Entornos de ejecución de lenguajes de programación (runtimes)
  • Bibliotecas C enlazadas dinámicamente
  • Certificados CA

Al crear una imagen base, o cualquier otra imagen, este es un aspecto muy importante a considerar. Es por eso que crear una imagen base utilizando FROM scratch puede ser difícil para cualquier programa que no sea pequeño y sencillo. Por otra parte, también es importante incluir solo lo necesario en tu imagen para reducir su tamaño y la superficie de ataque.

Crear una imagen completa utilizando tar

En general, debes comenzar con una máquina en funcionamiento que ejecute la distribución que te gustaría empaquetar como imagen base, aunque esto no es un requisito para herramientas como Debootstrap de Debian, la cual también puedes usar para compilar imágenes de Ubuntu.

Por ejemplo, para crear una imagen base de Ubuntu:

$ sudo debootstrap noble noble > /dev/null
$ sudo tar -C noble -c . | docker import - noble

sha256:81ec9a55a92a5618161f68ae691d092bf14d700129093158297b3d01593f4ee3

$ docker run noble cat /etc/lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=24.04
DISTRIB_CODENAME=noble
DISTRIB_DESCRIPTION="Ubuntu 24.04.2 LTS"

Puedes encontrar más scripts de ejemplo para crear imágenes base en el repositorio de GitHub de Moby.

Más recursos

Para obtener más información sobre la compilación de imágenes y la escritura de Dockerfiles, consulta: