Cómo usar el comando docker login para autenticarse en registros

DockerBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá cómo autenticarse en registros de Docker utilizando el comando docker login. Cubriremos la autenticación en Docker Hub utilizando el inicio de sesión web estándar, la autenticación en un registro autoalojado con un nombre de usuario y una contraseña, y la provisión de la contraseña a través de STDIN para escenarios no interactivos. Esta experiencia práctica le proporcionará las habilidades esenciales para acceder y gestionar de forma segura imágenes en diversos entornos de registro de Docker.

Autenticarse en Docker Hub utilizando el inicio de sesión web

En este paso, aprenderá cómo autenticarse en Docker Hub utilizando el método de inicio de sesión web. Esta es la forma más común de iniciar sesión en Docker Hub y es adecuada para sesiones interactivas.

Docker Hub es un servicio de registro basado en la nube proporcionado por Docker que le permite almacenar y compartir sus imágenes de Docker. Para enviar o descargar imágenes privadas, debe autenticarse con Docker Hub.

El comando docker login se utiliza para autenticarse con un registro de Docker. Por defecto, se autentica con Docker Hub.

Abra su terminal en el entorno de LabEx. Usted está en el directorio ~/project.

Para iniciar sesión en Docker Hub, ejecute el siguiente comando:

docker login

Cuando ejecute este comando, se le pedirá que ingrese su nombre de usuario y contraseña de Docker Hub.

Inicia sesión con tu ID de Docker para enviar y descargar imágenes desde Docker Hub. Si no tienes un ID de Docker, ve a https://hub.docker.com/ para crear uno.
Nombre de usuario: tu_nombre_de_usuario_de_Docker
Contraseña: tu_contraseña_de_Docker

Ingrese su nombre de usuario y contraseña de Docker Hub cuando se le solicite. Si la autenticación es exitosa, verá un mensaje similar a este:

ADVERTENCIA! Tu contraseña se almacenará sin cifrar en /home/labex/.docker/config.json.
Configura un ayudante de credenciales para eliminar esta advertencia. Ver
https://docs.docker.com/engine/reference/commandline/login/#credential-helpers

Inicio de sesión exitoso

Este mensaje indica que ha iniciado sesión correctamente en Docker Hub. La advertencia sobre la contraseña sin cifrar es esperada en este escenario y se puede ignorar para este laboratorio.

Ahora que ha iniciado sesión, puede descargar imágenes privadas de Docker Hub o enviar sus propias imágenes a su repositorio.

Intentemos descargar una imagen pública para confirmar que los comandos de Docker funcionan después de iniciar sesión. Descargaremos la imagen hello-world, que es una imagen pequeña utilizada para pruebas.

docker pull hello-world

Debería ver una salida que indique que la imagen se está descargando y extrayendo:

Usando la etiqueta predeterminada: latest
latest: Pulling from library/hello-world
...
Estado: Descargada la imagen más reciente para hello-world:latest
docker.io/library/hello-world:latest

Esto confirma que puede interactuar con Docker Hub después de autenticarse.

Autenticarse en un registro autoalojado con nombre de usuario y contraseña

En este paso, aprenderá cómo autenticarse en un registro de Docker autoalojado utilizando un nombre de usuario y una contraseña. Si bien Docker Hub es el registro predeterminado, es posible que necesite interactuar con registros privados alojados dentro de su organización o en un proveedor de servicios en la nube.

Un registro autoalojado es un registro de Docker que usted configura y gestiona usted mismo, en lugar de utilizar un servicio público como Docker Hub. Esto se hace a menudo por razones de seguridad, cumplimiento o rendimiento.

Para autenticarse en un registro autoalojado, se utiliza el mismo comando docker login, pero debe especificar la dirección del registro. El formato es docker login <dirección_del_registro>.

Para este laboratorio, simularemos un registro autoalojado. Utilizaremos una dirección de marcador de posición myregistry.local. En un escenario del mundo real, esta sería el nombre de dominio real o la dirección IP de su registro.

Abra su terminal en el directorio ~/project.

Para iniciar sesión en nuestro registro autoalojado simulado, ejecute el siguiente comando, reemplazando tu_nombre_de_usuario_del_registro y tu_contraseña_del_registro con las credenciales hipotéticas que utilizaría para ese registro:

docker login myregistry.local

Se le pedirá que ingrese el nombre de usuario y la contraseña para el registro myregistry.local:

Inicia sesión con tu ID de Docker para enviar y descargar imágenes desde myregistry.local. Si no tienes un ID de Docker, ve a https://hub.docker.com/ para crear uno.
Nombre de usuario: tu_nombre_de_usuario_del_registro
Contraseña: tu_contraseña_del_registro

Ingrese el nombre de usuario y la contraseña hipotéticas. Dado que myregistry.local no es un registro real en funcionamiento en este entorno, es probable que el inicio de sesión falle con un mensaje de error que indique que el registro no es alcanzable o que la autenticación ha fallado. Esto es lo esperado para esta simulación. Lo importante es entender la sintaxis del comando y el proceso de especificar un registro diferente.

Error response from daemon: Get "http://myregistry.local/v2/": dial tcp: lookup myregistry.local on 127.0.0.53:53: no such host

Aunque el inicio de sesión falló porque el registro no existe, la sintaxis del comando docker login <dirección_del_registro> es correcta para intentar autenticarse en un registro autoalojado.

En un escenario real con un registro autoalojado en funcionamiento, un inicio de sesión exitoso resultaría en un mensaje de "Inicio de sesión exitoso", y sus credenciales para ese registro específico se almacenarían en su archivo de configuración de Docker (~/.docker/config.json).

Examinemos el archivo de configuración de Docker para ver cómo se almacenan la información del registro.

cat ~/.docker/config.json

Verá una estructura JSON. Después de un inicio de sesión exitoso en Docker Hub en el paso anterior, debería ver una entrada para https://index.docker.io/v1/. Si hubiera iniciado sesión correctamente en myregistry.local, vería una entrada adicional para esa dirección de registro.

{
  "auths": {
    "https://index.docker.io/v1/": {
      "auth": "..."
    }
  },
  "HttpHeaders": {
    "User-Agent": "Docker-Client/..."
  },
  "credsStore": "desktop"
}

La sección auths contiene información de autenticación para diferentes registros en los que ha iniciado sesión. Cada clave en auths es la dirección del registro, y el valor contiene los detalles de autenticación.

Este paso demostró cómo especificar la dirección de un registro autoalojado cuando se utiliza docker login.

Proporcionar la contraseña utilizando STDIN para un inicio de sesión no interactivo

En este paso, aprenderá cómo proporcionar su contraseña de registro de Docker utilizando la entrada estándar (STDIN). Este método es especialmente útil para escenarios no interactivos, como scripting o despliegues automatizados, donde no puede ingresar manualmente la contraseña cuando se le solicite.

Cuando utiliza docker login en una terminal interactiva, se le solicita la contraseña. Sin embargo, en los scripts, necesita una forma de pasar la contraseña sin intervención manual. La opción --password-stdin le permite leer la contraseña desde STDIN.

Nota importante de seguridad: Pasar contraseñas directamente en la línea de comandos generalmente no es seguro porque el comando y sus argumentos pueden ser visibles en las listas de procesos (ps) o en el historial de la shell. Leer la contraseña desde STDIN es un enfoque más seguro para scripting, ya que evita exponer la contraseña en estos lugares.

Abra su terminal en el directorio ~/project.

Para demostrar esto, simularemos el inicio de sesión en Docker Hub utilizando STDIN. Necesitará su nombre de usuario y contraseña de Docker Hub.

La estructura del comando es escribir la contraseña con echo y enviarla por tubería (pipe) a docker login --username <tu_nombre_de_usuario_de_Docker> --password-stdin.

Reemplace tu_nombre_de_usuario_de_Docker con su nombre de usuario real de Docker Hub y tu_contraseña_de_Docker con su contraseña real de Docker Hub.

echo "tu_contraseña_de_Docker" | docker login --username tu_nombre_de_usuario_de_Docker --password-stdin

Después de ejecutar este comando, debería ver una salida similar a esta, que indica un inicio de sesión exitoso:

ADVERTENCIA! Tu contraseña se almacenará sin cifrar en /home/labex/.docker/config.json.
Configura un ayudante de credenciales para eliminar esta advertencia. Ver
https://docs.docker.com/engine/reference/commandline/login/#credential-helpers

Inicio de sesión exitoso

Nuevamente, la advertencia sobre la contraseña sin cifrar es esperada en este entorno de laboratorio.

Este método es crucial para automatizar operaciones de Docker que requieren autenticación. Por ejemplo, en una canalización CI/CD, es posible que almacene sus credenciales de Docker Hub como variables de entorno y utilice este método para iniciar sesión antes de construir y enviar imágenes.

También puede utilizar este método para iniciar sesión en un registro autoalojado agregando la dirección del registro al final del comando:

echo "tu_contraseña_del_registro" | docker login myregistry.local --username tu_nombre_de_usuario_del_registro --password-stdin

Como en el paso anterior, es probable que este comando falle en este laboratorio porque myregistry.local no es un registro en funcionamiento. Sin embargo, la sintaxis para proporcionar la contraseña a través de STDIN para un registro específico es correcta.

Este paso le ha mostrado cómo realizar un inicio de sesión no interactivo en un registro de Docker enviando la contraseña por tubería al comando docker login utilizando la opción --password-stdin.

Resumen

En este laboratorio, aprendiste cómo autenticarte en registros de Docker utilizando el comando docker login. Primero, practicaste la autenticación en Docker Hub utilizando el método estándar de inicio de sesión interactivo basado en la web, proporcionando tu nombre de usuario y contraseña cuando se te solicitó. Esto demostró el proceso básico de iniciar sesión en el registro predeterminado de Docker.

Luego, exploraste la autenticación en un registro autoalojado especificando la URL del registro junto con un nombre de usuario y una contraseña. Finalmente, aprendiste cómo proporcionar la contraseña utilizando STDIN, que es un método más seguro para escenarios no interactivos y scripting, ya que evita que la contraseña se exponga en el historial de comandos o en los registros. Estos pasos cubrieron diferentes métodos para asegurar el acceso a los registros de Docker para enviar y descargar imágenes.