Cuando trabajas con Docker, utilizas imágenes: archivos ejecutables que contienen todo lo necesario para ejecutar una aplicación, incluido el código fuente, las bibliotecas y las dependencias. Estas imágenes se almacenan en repositorios especializados llamados registros, que pueden ser privados o públicos.
El registro público más conocido es Docker Hub, donde puedes encontrar muchas imágenes oficiales como Nginx, PostgreSQL, Alpine, Ubuntu, Node o MongoDB.
Los usuarios pueden registrarse en Docker Hub y almacenar sus propias imágenes: por defecto, cuentan con un registro público y tres registros privados. Docker Hub es el registro predeterminado que Docker utiliza para descargar (pull) imágenes.
Esta guía explica cómo cambiar el registro predeterminado de Docker por otro alternativo.
Una forma sencilla de usar registros externos es aprovechar los servicios ofrecidos por proveedores como Google o Amazon.
A continuación se muestra una lista de registros públicos que puedes utilizar:
|
URL del registro |
Propietario |
|
|
|
|
Amazon |
|
|
Red Hat |
|
|
Red Hat |
|
|
Red Hat |
⚠️ Nota: el uso de registros externos puede implicar riesgos de seguridad. Utilízalos con precaución.
Sigue los pasos siguientes para sustituir Docker Hub por otro registro predeterminado.
Abre el archivo daemon.json con un editor de texto.
Si Docker está instalado fuera del modo rootless, el archivo se encuentra en:
/etc/docker/daemon.json
Si no existe, créalo con:
nano /etc/docker/daemon.json
Para Docker en modo rootless, el archivo se ubica en el directorio personal del usuario:
~/.config/docker/daemon.json
Créalo si es necesario:
nano ~/.config/docker/daemon.json
Agrega el siguiente parámetro para definir un nuevo registro predeterminado (en este ejemplo, el espejo de Google):
{
"registry-mirrors": ["https://mirror.gcr.io"]
}
Guarda y cierra el archivo.
Reinicia el servicio de Docker para aplicar los cambios:
systemctl reload docker
A partir de ahora, Docker usará el nuevo registro para descargar imágenes.
Por ejemplo, para obtener la imagen Alpine desde el registro de Google:
docker pull mirror.gcr.io/alpine
También puedes especificar una versión concreta:
docker pull mirror.gcr.io/nginx:1.25.2
Abre el archivo daemon.json, ubicado en:
C:\Users\<tu_usuario>\.docker\daemon.json
Agrega el parámetro:
{
"registry-mirrors": ["https://mirror.gcr.io"]
}
Guarda el archivo y reinicia Docker. Haz clic derecho en el icono de Docker en la bandeja del sistema y selecciona Restart.
También puedes realizar esta configuración desde la interfaz de Docker Desktop:
ve a Settings → Docker Engine y añade lo siguiente:
{
"registry-mirrors": ["https://mirror.gcr.io"]
}
Haz clic en Apply & Restart para aplicar los cambios y reiniciar Docker. Tras el reinicio, Docker usará el nuevo registro para las descargas.
Por ejemplo, descarga una imagen de curl:
docker pull mirror.gcr.io/curlimages/curl
O una versión específica:
docker pull mirror.gcr.io/node:21-alpine
También puedes usar Nexus para gestionar imágenes Docker. Nexus admite repositorios proxy, que almacenan en caché las imágenes obtenidas de registros externos como Docker Hub. Esto permite que Nexus actúe como un registro proxy en caché, muy útil si los registros externos dejan de estar disponibles temporalmente.
Inicia sesión en Nexus con un usuario administrador o un usuario con permisos para crear repositorios.
Ve a Server Administration and Configuration → Repositories.
Haz clic en Create repository y selecciona el tipo docker (proxy)
Completa los siguientes campos:
Name: asigna un nombre único al repositorio.
Online: marca esta opción para habilitar el repositorio.
Proxy server: si Nexus está detrás de un proxy (como Nginx), no será necesario usar puertos de autenticación.
Si no hay proxy, asigna un puerto único para HTTP o HTTPS.
Allow anonymous docker pull: si está activado, no será necesario iniciar sesión para descargar imágenes.
Si está desactivado, deberás autenticarte antes de hacer pull.
Remote storage: especifica la URL del registro externo, por ejemplo https://registry-1.docker.io para Docker Hub.
Una vez creado el repositorio, inicia sesión (si es necesario) con:
docker login <direccion_registro_nexus>
Para descargar una imagen:
docker pull <direccion_registro_nexus>/nombre_imagen:tag
Ejemplo: descargar una imagen de Python con el tag 3.8.19-alpine:
docker pull nexus-repo.com/python:3.8.19-alpine
⚠️ Consejo de seguridad: evita usar la etiqueta latest, ya que podría contener errores o vulnerabilidades.
En este artículo se han presentado varios métodos para descargar y almacenar imágenes Docker. El uso de registros externos puede ser útil cuando Docker Hub no está disponible. Si no confías en los registros públicos, siempre puedes configurar tu propio registro Docker, ya sea privado o público, utilizando herramientas como Nexus o Harbor.