Replicar la biblioteca de Docker Hub
Caso de uso
Si tienes múltiples instancias de Docker ejecutándose en tu entorno, como varias máquinas físicas o virtuales que ejecutan Docker, cada demonio se conecta a internet y descarga del repositorio de Docker una imagen que no tiene localmente. Puedes ejecutar una réplica local del registro y apuntar todos tus demonios allí para evitar este tráfico de internet adicional.
NoteLas Docker Official Images son propiedad intelectual de Docker.
Alternativas
Alternativamente, si el conjunto de imágenes que utilizas está bien delimitado, puedes descargarlas manualmente y subirlas a un registro privado local simple.
Además, si tus imágenes se compilan internamente, no usar el Hub en absoluto y depender por completo de tu registro local es el escenario más sencillo.
Limitación
Actualmente no es posible replicar otro registro privado. Solo se puede replicar el Hub central.
NoteLas réplicas de Docker Hub siguen estando sujetas a la política de uso justo de Docker.
Solución
El registro se puede configurar como un caché de descarga directa (pull-through cache). En este modo, un registro responde a todas las solicitudes normales de docker pull pero almacena todo el contenido localmente.
Usar la Gestión de Acceso al Registro (RAM) con una réplica de registro
Si el acceso a Docker Hub está restringido a través de tu configuración de Gestión de Acceso al Registro (Registry Access Management - RAM), no podrás descargar imágenes originarias de Docker Hub incluso si las imágenes están disponibles en la réplica de tu registro.
Te encontrarás con el siguiente error:
Error response from daemon: Access to docker.io has been restricted by your administrators.
Si no puedes permitir el acceso a Docker Hub, puedes descargar manualmente desde la réplica de tu registro y, opcionalmente, volver a etiquetar la imagen. Por ejemplo:
docker pull <your-registry-mirror>[:<port>]/library/busybox
docker tag <your-registry-mirror>[:<port>]/library/busybox:latest busybox:latest
¿Cómo funciona?
La primera vez que solicitas una imagen a la réplica de tu registro local, esta descarga la imagen desde el registro público de Docker y la almacena localmente antes de entregártela. En las solicitudes posteriores, la réplica del registro local puede servir la imagen desde su propio almacenamiento.
¿Qué pasa si el contenido cambia en el Hub?
Cuando se intenta una descarga con una etiqueta, el registro comprueba el control remoto para asegurarse de si tiene la versión más reciente del contenido solicitado. De lo contrario, descarga y almacena en caché el contenido más reciente.
¿Qué pasa con el disco?
En entornos con altas tasas de rotación, los datos obsoletos pueden acumularse en el caché. Cuando funciona como un caché de descarga directa, el registro elimina periódicamente el contenido antiguo para ahorrar espacio en disco. Las solicitudes posteriores de contenido eliminado provocan una descarga remota y un nuevo almacenamiento en caché local.
Para garantizar el mejor rendimiento y la corrección, el caché del registro debe configurarse para utilizar el controlador filesystem para el almacenamiento.
Ejecutar un registro como caché de descarga directa
La forma más sencilla de ejecutar un registro como caché de descarga directa es ejecutar la imagen oficial de Registry.
Como mínimo, debes especificar proxy.remoteurl dentro de /etc/docker/registry/config.yml como se describe en la siguiente subsección.
Se pueden desplegar múltiples cachés de registro sobre el mismo backend. Un único caché de registro garantiza que las solicitudes concurrentes no descarguen datos duplicados, pero esta propiedad no se cumple para un clúster de caché de registro.
Configurar el caché
Para configurar un registro para que funcione como caché de descarga directa, se requiere añadir una sección proxy al archivo de configuración.
Para acceder a imágenes privadas en Docker Hub, se puede suministrar un nombre de usuario y una contraseña.
proxy:
remoteurl: https://registry-1.docker.io
username: [username]
password: [password]WarningSi especificas un nombre de usuario y una contraseña, ten en cuenta que los recursos privados a los que este usuario tiene acceso en Docker Hub se pondrán a disposición en tu réplica. ¡Debes proteger tu réplica implementando autenticación si esperas que estos recursos sigan siendo privados!
WarningPara que el programador limpie las entradas antiguas, se debe habilitar
deleteen la configuración del registro.
Configurar el demonio de Docker
Pasa la opción --registry-mirror al iniciar dockerd manualmente, o edita
/etc/docker/daemon.json y añade la clave y el valor de registry-mirrors para que el cambio sea permanente.
{
"registry-mirrors": ["https://<my-docker-mirror-host>"]
}Guarda el archivo y recarga Docker para que el cambio surta efecto.
NoteAlgunos mensajes de registro que parecen ser errores son en realidad mensajes informativos.
Comprueba el campo
levelpara determinar si el mensaje te advierte de un error o te está dando información. Por ejemplo, este mensaje de registro es informativo:time="2017-06-02T15:47:37Z" level=info msg="error statting local store, serving from upstream: unknown blob" go.version=go1.7.4Te está indicando que el archivo aún no existe en el caché local y que se está descargando desde el origen (upstream).