Docker Registry — Entendendo melhor

Danilo Barreto Bezerra
4 min readMay 31, 2021

--

Para quem já conhece ou está acostumado o que vou explicar pode parecer simples, mas para quem está começando e aprendendo/descobrindo o mundo Docker/Linux, acredito que esta explicação pode ajudar.

Docker Registry

Docker registry é um repositório de imagens para que você consiga subir (push) e baixar (pull) imagens dele, usamos ele com o comando: “docker pull mysql” por exemplo, este comando na verdade você está baixando uma imagem do MySql do “docker registry” público, no docker registry público podemos publicar lá o que quisermos, “mas lembre-se é publico”.

Mas e quando você tem projetos privados e não pode publicar em um repositório publico (a menos que você queira claro), para isso existem muitos serviços na web a grande maioria pagos (se você conhecer alguns gratuitos compartilha comigo), o próprio Docker Hub oferece gratuitamente 1 (registro ou espaço) para armazenar sua imagem de forma privada, mas só 1, se você precisar de mais terá que assinar um plano, deixo no final uma pesquisa bem rápida dos repositórios e seus preços.

Eu até paguei o DockerHub para ter mais repositórios, fiz uma integração dele com github tudo que fazia commit no github ele já baixava e compilava, uma maravilha, mas a demora em compilar e algumas vezes alguns processos de build ficaram travados por horas desisti e cancelei minha assinatura.

Armazenar imagens de forma privada

Para armazenar imagens de forma privada, você pode criar o seu repositório, na sua rede interna, na sua nuvem, no seu servidor linux enfim…., claro que toda manutenção e segurança é por sua conta!
Um docker registry privado é a mesma coisa que você ter em sua rede um repositório GIT, TFS entre outros…

Porque usar um Docker Registry?

Imagine uma empresa que tem todo um processo para publicação de um sistema de forma automatizada onde basta apertar um botão e o processo pega a ultima imagem docker, e aplica em diversos servidores rapidamente, seria para esses casos (mas isso é só um resumo breve).

Como fazer

Você pode instalar/rodar um container do docker registry seguindo aqui.
É bem simples, o que é complicado vou dar umas dicas….

1º — Um container Docker Registry criado manualmente deve ter uma segurança básica e você pode aprender a fazer olhando esta documentação.

2º —Para fazer login no seu docker registry ou efetuar o envio (push) seja por qual for a ferramenta ele vai transformar seu IP ou domínio para https, exemplo, meu docker registry está em example.com ao tentar efetuar um login nele usando os comandos:

docker login example.com:5000

Ele vai pedir usuário e senha, após digitar você pode receber uma mensagem:

Error response from daemon: Get https://example.com:5000/v2/: http: server gave HTTP response to HTTPS client

Então podemos remover essa segurança/obrigatoriedade dos 2 lados, no client e no server (docker registry)

No Linux

sudo nano /etc/docker/daemon.json

E cole o conteúdo:

{
“insecure-registries”: [“example.com:5000”]
}

Reinicie o docker:

sudo systemctl restart docker

No Windows

%programdata%\docker\config\daemon.json

Obtive isto do manual, mas não consegui encontrar então fiz na interface do docker mesmo abaixo print

Windows configurando para permitir utilizar um registry sem HTTPS ao domínio: exaple.com na porta 5000

No Windows ao mudar a configuração aperte “aplicar e reiniciar”.

Feito o processo acima para Windows ou Linux, tente fazer o login novamente….

docker login example.com:5000

Sucesso!!

Pronto agora você já pode publicar suas imagens no seu repositório de imagens, você pode fazer isso por linha de comando ou usar ferramentas como o próprio Visual Studio, abaixo vou explicar.

Publicando com Visual Studio

Botão direto na aplicação > Publish…

Visual Studio

Publicando por linha de comando

A primeira coisa é gerar sua imagem docker da sua aplicação então “docker build .” a imagem será gerada seguindo as configurações do seu projeto etc… não vou entrar muito no detalhe.

Após ter sua imagem gerada, o que você precisa fazer é criar uma tag para imagem que você quer subir no seu docker registry então digitamos:

docker tag NomeImagemLocal example.com:5000/nomeImagemNoServer:TagDaImagem (normalmente latest)

Vale lembrar que para fazer isso você já deve ter efetuado login no seu registry como expliquei acima.

Depois para publicar sua imagem:

docker push exaple.com:5000/nomeImagemNoServer:TagDaImagem

Pronto!!
Espero ter ajudado.

Repositórios e preços

GitHub Packages, é gratuito para até 500mb de imagens privadas, para imagens públicas é de fato gratuito.
Você pode conferir os preços aqui

Docker Hub eles chamam de Repositório como falei acima ele permite 1 repositório de imagem privada, para mais deve ser feito assinatura.
Você pode conferir os preços aqui

GitLab Container Registry não encontrei muita informação detalhada
Você pode conferir os preços aqui

Azure Container Registry é pago mas não tenho muitas informações se tem planos gratuitos.
Você pode conferir os preços aqui.

--

--

Danilo Barreto Bezerra

Desenvolvedor há mais de 20 anos, atualmente estou me especializando em ASP.NET CORE com Linux.