Como criar seu próprio registro Docker privado

Executar seu próprio registro do Docker oferece um local privado para armazenar suas imagens do Docker. Esteja você em um ambiente corporativo ou apenas queira reduzir sua dependência do Docker Hub, veja como você pode começar a trabalhar com uma implantação de registro.
Docker Registry é um sistema do lado do servidor que armazena e indexa imagens Docker. Você “ pressiona ” imagens pré-construídas no registro. Outros usuários podem então “ puxar ” baixá-los para executá-los, sem a necessidade de acesso ao Dockerfile original.
O registro público mais conhecido é o Docker Hub. Usar seu próprio registro permite que você controle o armazenamento de imagens e os métodos de acesso. Também pode facilitar a integração com ferramentas de terceiros.
Existem serviços gerenciados disponíveis que permitem criar rapidamente instalações de registro. Este guia se concentra na auto-hospedagem de um registro em seu próprio servidor. Os únicos pré-requisitos são que você &’ precisará ter o Docker e o docker-compose instalados na máquina que hospedará o registro.
Executando um registro
O servidor Docker Registry é distribuído como sua própria imagem Docker. Você pode obtê-lo no Docker Hub. O servidor está exposto na porta 5000; você precisará vincular uma porta de host a ele para que os clientes possam se conectar.
Você também deve configurar um volume para que o Docker Hub tenha um lugar para armazenar persistentemente as imagens carregadas. Verifique se você tem espaço livre suficiente em seu host. Um registro usado ativamente pode crescer rapidamente.
Comece criando um arquivo docker-compose. yml para descrever sua implantação. Você pode ajustar as portas e caminhos do sistema de arquivos para corresponder às suas preferências. Este exemplo tornará o registro acessível na porta 5000. As imagens serão armazenadas na pasta de dados em seu diretório de trabalho.
versão: " 3 " serviços: registro: imagem: registro: 2 portas: - 5000: 5000 ambiente: - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: / reinício de dados: volumes a menos que parados: - ./data:/data
Salve o arquivo e execute docker-compose up -d para iniciar o seu registro. docker-compose extrairá a imagem do registro do Docker Hub. Em seguida, ele iniciará um novo contêiner usando sua configuração.
Acessando seu registro
Agora você deve conseguir começar a usar o seu registro. Marque uma imagem usando um caminho que leva ao seu registro. Você pode usar localhost se estiver trabalhando no próprio servidor de registro. Você poderá então enviar a imagem para o registro.
docker tag my-image localhost: 5000 / my-image docker push localhost: 5000 / my-image
A imagem agora estará disponível no registro. Se você inspecionar sua pasta de dados, verá as camadas que compõem a imagem. Você pode puxá-lo de outra máquina usando docker pull. Substitua localhost pelo endereço de rede do servidor que executa o registro.
Configurando a autenticação
O registro não está protegido no momento. Qualquer um pode puxar e empurrar imagens! Vamos resolver isso configurando a autenticação. Depois de configurado, você precisará usar o login do docker antes de interagir com o registro.
A abordagem padrão para autenticação do
Docker Registry &’ usa HTTP Basic Auth. Você &’ precisará criar um arquivo htpasswd – isso é melhor feito usando o comando fornecido por apache2-utils.
sudo apt install apache2-utils mkdir auth htpasswd -Bc auth / . htpasswd meu-nome de usuário
Isso criará um arquivo de autenticação para o usuário meu-nome de usuário. Você será solicitado a fornecer uma senha. O arquivo htpasswd será então gravado no diretório de trabalho como auth / . htpasswd.
Em seguida, atualize o docker-compose. yml para configurar o sistema de autenticação. Você deve especificar o tipo de autenticação usado e o caminho para o arquivo htpasswd. Isso precisará ser montado como um novo volume.
versão: " 3 " serviços: registro: imagem: registro: 2 portas: - 5000: 5000 ambiente: - REGISTRY_AUTH: htpasswd - REGISTRY_AUTH_HTPASSWD_REALM: Domínio de registro - REGISTRY_AUTH_HTPASSWD_PATH: /auth/. htpasswd - volumes REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: a menos que reinicie / dados interrompidos: a. : / auth - ./data:/data
Execute docker-compose up -d --force-recreate para recriar o contêiner de registro em execução usando a nova configuração. Você deve descobrir que a Docker CLI agora se recusa a permitir que você interaja com o registro.
Para restaurar o acesso, execute docker login localhost: 5000. Você precisará ajustar o URI do registro se não estiver executando o Docker na mesma máquina. O Docker solicitará que você forneça seu nome de usuário e senha. Use os valores que você definiu ao criar o arquivo . htpasswd.
Assim que a autenticação for bem-sucedida, você poderá começar a enviar e receber imagens novamente. O Docker armazena suas credenciais em cache para que você não precise repetir a autenticação até fazer o logout do docker.
Configurando SSL
Você precisará adicionar um certificado SSL para todas as conexões, exceto as mais básicas pelo localhost. Você pode adicionar um certificado SSL ao registro montando o certificado em um volume e definindo variáveis de ambiente adicionais. Normalmente, você deve atualizar a configuração da porta para que o registro ouça em 443, a porta HTTPS padrão.
versão: " 3 " serviços: registro: imagem: registro: 2 portas: - 443: 5000 ambiente: - REGISTRY_AUTH: htpasswd - REGISTRY_AUTH_HTPASSWD_REALM: Domínio do registro - REGISTRY_AUTH_HTPASSWD_PATH: /auth/. htpasswd - REGISTRY_HTTP_ADDR: 0.0.0.0:443 - REGISTRY_HTTP_ADDR_TTTPCertTTP / cerHTTPICA = 0.0.0.0:443 - REGISTRY_HTTP_ADDR_TTTPCertTPICA = CERHTTPICATE / CERHTTPICATE_ CERTSICATE_0.0.0.0:443 - REGISTRY_HTTP_ADDR_TTTPCert. HTTPICATE = CERHTTPICATE / CERHTTPICA = CERHTTPICATE / CERHTTPICATE_CRIST. crt - REGISTRY_HTTP_TLS_KEY = / certs / cert. key - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: / reinício de dados: volumes a menos que interrompidos: - ./auth:/auth - ./certs:/certs - ./data:/data
Adicione seus arquivos de certificado a certificados e reinicie o registro. Ele deve voltar com suporte HTTPS, usando o arquivo de certificado fornecido.
SSL via LetsEncrypt
O servidor de registro tem suporte integrado para Let &’ s Encrypt. Isso permite que você gere e renove automaticamente seus certificados SSL. Para usar Let &’ s Encrypt, você deve expor publicamente seu registro na porta 443.
Defina as variáveis de ambiente REGISTRY_HTTP_TLS_LETSENCRYPT_EMAIL e REGISTRY_HTTP_TLS_LETSENCRYPT_HOSTS para adicionar suporte TLS ao seu registro. O Let &’ s Encrypt usará o endereço de e-mail como contato para seus certificados SSL.
versão: " 3 " serviços: registro: imagem: registro: 2 portas: - 443: 5000 ambiente: - REGISTRY_AUTH: htpasswd - REGISTRY_AUTH_HTPASSWD_REALM: Domínio do Registro - REGISTRY_AUTH_HTPASSWD_PATH: /auth/. htpasswd - REGISTRY_HTTP_TLS_LETSENCRYPT_exemplo_e_exemplo@registo_de_exemplo_EM_EM_BRYTP: REGISTRY_HTTP_PT_BRYPT_EMHTIL: 91_HTPESENCRYPT_EM_EXEMA_ES_EM_EXAMPL_EM_ES_EM_ES_EM_ES_EMP_REGRAYTP_EM_EXAMPLES_EMPLETSENCRYPT_EMP_EM_EM_ES_EM_ES_EM_ES_EM_LETSENCRYPT_EMP_EM_ES_EMPLETO_LETSENCRYPT_EMPLE_EM_RE_TR. -registry. com & # 93; - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: / reinício de dados: volumes a menos que interrompidos: - ./auth:/auth - ./certs:/certs - ./data:/data
Recrie o contêiner com docker-compose up -d --force-recreate para aplicar a mudança. O registro usará Let &’ s Encrypt para adquirir um certificado SSL para os domínios especificados. Pode levar alguns minutos para que o certificado fique disponível.
Outras maneiras de implantar
A implantação com docker-compose, HTTP Basic Auth e Let &’ s Encrypt é a maneira mais simples de executar um registro de contêiner privado. No entanto, existem outras opções disponíveis, principalmente se você quiser um controle de acesso mais avançado.
Usar a autenticação básica não vai além de um punhado de usuários. Como alternativa, o servidor oferece suporte a uma rotina de autenticação delegada que depende de servidores de token externos. Isso é projetado para cenários em que é necessária uma integração estreita com os sistemas de controle de acesso organizacional.
O servidor de registro não implementa a autenticação de token por conta própria. Projetos como docker_auth tentam adicionar essa peça que faltava, fornecendo um sistema de autenticação completo que pode ser implantado junto com o registro principal.
Projetos alternativos visam tornar mais fácil o gerenciamento de seu registro, sem recorrer a comandos de terminal práticos. Portus é um projeto SUSE que fornece um front-end da web, bem como seu próprio sistema de autenticação de usuário.
Nenhum comentário