Como usar o comando docker login para autenticar em registros

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como se autenticar em registros Docker usando o comando docker login. Abordaremos a autenticação no Docker Hub usando o login padrão baseado na web, a autenticação em um registro auto-hospedado com nome de usuário e senha, e o fornecimento da senha via STDIN para cenários não interativos. Esta experiência prática irá equipá-lo com as habilidades essenciais para acessar e gerenciar imagens com segurança em vários ambientes de registro Docker.

Autenticar no Docker Hub usando login baseado na web

Nesta etapa, você aprenderá como se autenticar no Docker Hub usando o método de login baseado na web. Esta é a maneira mais comum de fazer login no Docker Hub e é adequada para sessões interativas.

O Docker Hub é um serviço de registro baseado em nuvem fornecido pela Docker que permite armazenar e compartilhar suas imagens Docker. Para enviar (push) ou baixar (pull) imagens privadas, você precisa se autenticar no Docker Hub.

O comando docker login é usado para autenticar em um registro Docker. Por padrão, ele se autentica no Docker Hub.

Abra seu terminal no ambiente LabEx. Você está no diretório ~/project.

Para fazer login no Docker Hub, execute o seguinte comando:

docker login

Ao executar este comando, você será solicitado a inserir seu nome de usuário e senha do Docker Hub.

Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com/ to create one.
Username: your_docker_username
Password: your_docker_password

Insira seu nome de usuário e senha do Docker Hub quando solicitado. Se a autenticação for bem-sucedida, você verá uma mensagem semelhante a esta:

WARNING! Your password will be stored unencrypted in /home/labex/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-helpers

Login Succeeded

Esta mensagem indica que você fez login com sucesso no Docker Hub. O aviso sobre a senha não criptografada é esperado neste cenário e pode ser ignorado para este laboratório.

Agora que você está logado, pode baixar (pull) imagens privadas do Docker Hub ou enviar (push) suas próprias imagens para seu repositório.

Vamos tentar baixar (pull) uma imagem pública para confirmar que os comandos Docker estão funcionando após o login. Vamos baixar (pull) a imagem hello-world, que é uma imagem pequena usada para testes.

docker pull hello-world

Você deve ver a saída indicando que a imagem está sendo baixada e extraída:

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Isso confirma que você pode interagir com o Docker Hub após a autenticação.

Autenticar em um registro auto-hospedado com nome de usuário e senha

Nesta etapa, você aprenderá como se autenticar em um registro Docker auto-hospedado usando um nome de usuário e senha. Embora o Docker Hub seja o registro padrão, pode ser necessário interagir com registros privados hospedados dentro de sua organização ou em um provedor de nuvem.

Um registro auto-hospedado é um registro Docker que você configura e gerencia sozinho, em vez de usar um serviço público como o Docker Hub. Isso é frequentemente feito por motivos de segurança, conformidade ou desempenho.

Para se autenticar em um registro auto-hospedado, você usa o mesmo comando docker login, mas precisa especificar o endereço do registro. O formato é docker login <registry_address>.

Para este laboratório, simularemos um registro auto-hospedado. Usaremos um endereço de espaço reservado myregistry.local. Em um cenário real, este seria o nome de domínio ou endereço IP real do seu registro.

Abra seu terminal no diretório ~/project.

Para fazer login em nosso registro auto-hospedado simulado, execute o seguinte comando, substituindo your_registry_username e your_registry_password por credenciais hipotéticas que você usaria para esse registro:

docker login myregistry.local

Você será solicitado a inserir o nome de usuário e a senha para o registro myregistry.local:

Login with your Docker ID to push and pull images from myregistry.local. If you don't have a Docker ID, head over to https://hub.docker.com/ to create one.
Username: your_registry_username
Password: your_registry_password

Insira o nome de usuário e a senha hipotéticos. Como myregistry.local não é um registro real e em execução neste ambiente, o login provavelmente falhará com uma mensagem de erro indicando que o registro está inacessível ou que a autenticação falhou. Isso é esperado para esta simulação. A parte importante é entender a sintaxe do comando e o processo de especificação de um 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

Embora o login tenha falhado porque o registro não existe, a sintaxe do comando docker login <registry_address> está correta para tentar se autenticar em um registro auto-hospedado.

Em um cenário real com um registro auto-hospedado em execução, um login bem-sucedido resultaria em uma mensagem "Login Succeeded", e suas credenciais para esse registro específico seriam armazenadas em seu arquivo de configuração do Docker (~/.docker/config.json).

Vamos examinar o arquivo de configuração do Docker para ver como as informações do registro são armazenadas.

cat ~/.docker/config.json

Você verá uma estrutura JSON. Após um login bem-sucedido no Docker Hub na etapa anterior, você deve ver uma entrada para https://index.docker.io/v1/. Se você tivesse feito login com sucesso em myregistry.local, veria uma entrada adicional para esse endereço de registro.

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

A seção auths contém informações de autenticação para diferentes registros nos quais você fez login. Cada chave em auths é o endereço do registro, e o valor contém os detalhes de autenticação.

Esta etapa demonstrou como especificar um endereço de registro auto-hospedado ao usar docker login.

Fornecer senha usando STDIN para login não interativo

Nesta etapa, você aprenderá como fornecer sua senha do registro Docker usando a entrada padrão (STDIN). Este método é particularmente útil para cenários não interativos, como scripts ou implantações automatizadas, onde você não pode inserir a senha manualmente quando solicitado.

Quando você usa docker login em um terminal interativo, ele solicita a senha. No entanto, em scripts, você precisa de uma maneira de passar a senha sem intervenção manual. A flag --password-stdin permite que você leia a senha de STDIN.

Nota Importante de Segurança: Passar senhas diretamente na linha de comando é geralmente inseguro porque o comando e seus argumentos podem ser visíveis em listas de processos (ps) ou no histórico do shell. Ler a senha de STDIN é uma abordagem mais segura para scripts, pois evita expor a senha nesses locais.

Abra seu terminal no diretório ~/project.

Para demonstrar isso, simularemos o login no Docker Hub usando STDIN. Você precisará de seu nome de usuário e senha do Docker Hub.

A estrutura do comando é ecoar a senha e canalizá-la para docker login --username <your_docker_username> --password-stdin.

Substitua your_docker_username pelo seu nome de usuário real do Docker Hub e your_docker_password pela sua senha real do Docker Hub.

echo "your_docker_password" | docker login --username your_docker_username --password-stdin

Após executar este comando, você deverá ver uma saída semelhante a esta, indicando um login bem-sucedido:

WARNING! Your password will be stored unencrypted in /home/labex/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-helpers

Login Succeeded

Novamente, o aviso sobre a senha não criptografada é esperado neste ambiente de laboratório.

Este método é crucial para automatizar operações Docker que exigem autenticação. Por exemplo, em um pipeline CI/CD, você pode armazenar suas credenciais do Docker Hub como variáveis de ambiente e usar este método para fazer login antes de construir e enviar imagens.

Você também pode usar este método para fazer login em um registro auto-hospedado adicionando o endereço do registro ao final do comando:

echo "your_registry_password" | docker login myregistry.local --username your_registry_username --password-stdin

Como na etapa anterior, este comando provavelmente falhará neste laboratório porque myregistry.local não é um registro em execução. No entanto, a sintaxe para fornecer a senha via STDIN para um registro específico está correta.

Esta etapa mostrou como realizar um login não interativo em um registro Docker, canalizando a senha para o comando docker login usando a flag --password-stdin.

Resumo

Neste laboratório, você aprendeu como se autenticar em registros Docker usando o comando docker login. Primeiro, você praticou a autenticação no Docker Hub usando o método de login interativo padrão baseado na web, fornecendo seu nome de usuário e senha quando solicitado. Isso demonstrou o processo básico de login no registro Docker padrão.

Em seguida, você explorou a autenticação em um registro auto-hospedado, especificando a URL do registro junto com um nome de usuário e senha. Por fim, você aprendeu como fornecer a senha usando STDIN, que é um método mais seguro para cenários não interativos e scripting, impedindo que a senha seja exposta no histórico de comandos ou logs. Essas etapas cobriram diferentes métodos para proteger o acesso aos registros Docker para enviar e baixar imagens.