Docker

15 jun, 2021

Docker Registry — Entendendo melhor

Publicidade

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 é 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, com este comando, na verdade, você está baixando uma imagem do MySql do “docker registry” público. No docker registry público podemos publicar 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 e grande maioria, são 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á de 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 com 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, em que 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 o 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.

Artigo original publicado aqui e republicado no iMasters a pedido do autor