preloader
  • Início
  • Criando seu próprio Docker Registry: Um guia passo a passo

Sistema privado para armazenamento de imagens de contêiner

blog-thumb

Um Docker Registry privado (private registry) pode ser útil para armazenar imagens de contêiners.

As imagens pode ficar a armazenadas em uma infra-estrutura interna, para um melhor controle e segurança do código de suas aplicações.

Utilizar registros públicos como o Docker Hub pode não ser uma boa opção. Mesmo quando se cria repositórios particulares, a segurança não é garantida.

Neste artigo irei ensinar como criar um private registry seguro e pronto para acessos criptografados com SSL/TLS, que pode ser utilizado para armazenar contêiners em geral, bem como integrar com o Red Hat OpenShift, a fim de fazer implementações desconectadas.

Pronto? Então vamos nessa!


Requisitos

Vamos precisar dos seguintes requisitos:

  • FQDN: registry.rhbrlabs.com

  • OS: RHEL8.6+

  • SELinux: Reforço

  • Firewalld: Habilitado

  • Registo: Podman

  • Ferramentas Apache

  • Volume: 100Gb montado sobre /dados


Instalação

Criar os diretórios necessários:

[root@registry ~]# mkdir -p /data/registry/{auth,certs,data}

Certificados

Gerar certificados para o private registry. Neste exemplo, estamos criando certificados que são válidos por 10 anos.

[root@registry ~]# openssl req -newkey rsa:4096 -nodes -sha256 \
-keyout /data/registry/certs/registry.rhbrlabs.com.key -x509 -days 3650 -out /data/registry/certs/registry.rhbrlabs.com.crt \
-subj "/C=US/ST=NorthCarolina/L=Raleigh/O=Red Hat/OU=Engineering/CN=registry.rhbrlabs.com" \
-addext "subjectAltName = DNS:registry.rhbrlabs.com"

Copie o certificado gerado para o diretório de âncoras confiáveis, e execute update-ca-trust:

[root@registry ~]# cp /data/registry/certs/registry.rhbrlabs.com.crt /etc/pki/ca-trust/source/anchors/
[root@registry ~]# update-ca-trust

Autenticação

Gerar um arquivo de autenticação para o image registry:

[root@registry ~]# dnf -y install httpd-tools
[root@registry ~]# htpasswd -bBc /data/registry/auth/htpasswd registry redhat12345678

Gerar uma senha randômica para aumentar a confiabilidade:

[root@registry ~]# date | md5sum

10f207a4cbba51bf00755b5a50718966 -

Registry

Criar o container registry utilizando o docker.io/library/registry:2

[root@registry ~]# dnf -y install podman
[root@registry ~]# podman create --name ocp-registry --net host -p **5000:5000** \
-v /data/registry/data:/var/lib/registry:z -v /data/registry/auth:/auth:z \
-e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry" \
-e "REGISTRY_HTTP_SECRET=**10f207a4cbba51bf00755b5a50718966**" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v /data/registry/certs:/certs:z \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.rhbrlabs.com.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/registry.rhbrlabs.com.key docker.io/library/registry:2

O comando acima irá gerar mensagens como esta:

Trying to pull docker.io/library/registry:2...
Getting image source signatures\
Copying blob fd4a5435f342 done\
Copying blob 213ec9aee27d done\
Copying blob 4583459ba037 done\
Copying blob b136d5c19b1d done\
Copying blob 6f6a6c5733af done\
Copying config dcb3d42c17 done\
Writing manifest to image destination\
Storing signatures\
Port mappings have been discarded as one of the Host, Container, Pod, and None network modes are in use\
22633f37262a4ab2d64fc8beb44bb80618b11802974fb2f45d31d98db3cf14e8

Unit File

Crie um arquivo UNIT para que o private registry inicie automaticamente o container registry durante o boot do sistema operacional.

[root@registry ~]# cat /etc/systemd/system/ocp-registry.service

[Unit] 
Description=OCP Registry

[Service] 
Restart=always ExecStart=/usr/bin/podman start -a ocp-registry ExecStop=/usr/bin/podman stop -t 10 ocp-registry

[Install] 
WantedBy=network-online.target

Serviço

Inicie o contêiner do private registry:

[root@registry ~]# systemctl daemon-reload
[root@registry ~]# systemctl enable --now ocp-registry.service
Registry Running


Firewall

Permitir a porta TCP 5000 no Firewalld:

[root@registry ~]# firewall-cmd --permanent --add-port=5000/tcp\
[root@registry ~]# firewall-cmd --reload

Testando

Verificar se a autenticação e a criptografia SSL/TLS estão funcionando:

[root@registry ~]# curl -u 'registry:redhat12345678' https://registry.rhbrlabs.com:5000/v2/_catalog
{"repositories":[]}

Gerar um arquivo temporário com as informações de autenticação para as instalações desconectadas do OpenShift:

[root@registry ~]# cat <<EOF > ~/registry-secret.json
"registry.rhbrlabs.com:5000": {
"email": "[email protected]",
"auth": "$(echo -n 'registry:redhat12345678' | base64 -w0)"
}
EOF

Ah, se você quer instalar o Docker no Ubuntu 22.04, o processo é o mesmo. Basta usar o comando apt ao invés de dnf para instalar o software.


Fim

É isso aí. Agora seu novo Docker Registry privado está pronto e funcionando. Divirta-se!



Pode ajudar?

Por favor apóie este conteúdo clicando em um banner de nossos anunciantes. ❤️

comments powered by Disqus