DevOps Admin

Container Registry: Docker Hub, GHCR e Registry Privado com Harbor: Do Básico ao Avançado Já leu

O que é um Container Registry Um Container Registry é um repositório centralizado onde você armazena, gerencia e distribui imagens Docker. Pense nele como um GitHub para imagens de contêiner — assim como você faz push e pull de código, você faz push e pull de imagens Docker. Quando você executa , o Docker procura essa imagem localmente; se não encontrar, ele automaticamente faz download do Registry padrão (Docker Hub). Sem registries, você precisaria compilar a mesma imagem Docker várias vezes em cada máquina ou transferir arquivos manualmente — impraticável em ambientes corporativos com dezenas de aplicações. Existem três tipos principais: públicos (Docker Hub), fornecidos por plataformas (GitHub Container Registry), e privados autohospedados (Harbor, Nexus). A escolha depende de segurança, custo e controle. Se sua imagem contém código proprietário ou dados sensíveis, usar Docker Hub público é arriscado. Se sua equipe já usa GitHub, o GHCR oferece integração nativa. Se você precisa de auditoria completa, versionamento granular e conformidade, Harbor

O que é um Container Registry

Um Container Registry é um repositório centralizado onde você armazena, gerencia e distribui imagens Docker. Pense nele como um GitHub para imagens de contêiner — assim como você faz push e pull de código, você faz push e pull de imagens Docker. Quando você executa docker run nginx, o Docker procura essa imagem localmente; se não encontrar, ele automaticamente faz download do Registry padrão (Docker Hub). Sem registries, você precisaria compilar a mesma imagem Docker várias vezes em cada máquina ou transferir arquivos manualmente — impraticável em ambientes corporativos com dezenas de aplicações.

Existem três tipos principais: públicos (Docker Hub), fornecidos por plataformas (GitHub Container Registry), e privados autohospedados (Harbor, Nexus). A escolha depende de segurança, custo e controle. Se sua imagem contém código proprietário ou dados sensíveis, usar Docker Hub público é arriscado. Se sua equipe já usa GitHub, o GHCR oferece integração nativa. Se você precisa de auditoria completa, versionamento granular e conformidade, Harbor é a solução robusta.

Docker Hub: O Registry Público Padrão

O Docker Hub é mantido pela Docker Inc. e é o registry padrão da comunidade. Quando você instala Docker, ele já está configurado para usar Docker Hub. É gratuito para repositórios públicos, mas oferece planos pagos para repositórios privados com quotas maiores de downloads. A simplicidade é sua força — ideal para projetos open-source e protótipos, mas inadequado para produção corporativa com dados sensíveis.

Criando e Enviando uma Imagem para Docker Hub

Primeiro, crie uma conta em hub.docker.com e confirme seu email. Depois, autentique-se localmente:

docker login

Você será solicitado a informar seu nome de usuário e token de acesso pessoal (não use sua senha diretamente; crie um PAT nas configurações da conta). Agora crie um Dockerfile simples:

FROM python:3.11-slim

WORKDIR /app

COPY app.py .

RUN pip install flask

CMD ["python", "app.py"]

E um arquivo app.py:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return {"message": "Hello from Docker Hub!"}

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

Construa a imagem com a tag no formato seu-usuario/nome-imagem:versao:

docker build -t seu-usuario/meu-app:1.0 .

Agora faça push para Docker Hub:

docker push seu-usuario/meu-app:1.0

Qualquer pessoa agora pode fazer pull dessa imagem públicamente:

docker run -p 5000:5000 seu-usuario/meu-app:1.0

Limitações do Docker Hub para Produção

Docker Hub oferece apenas 6 horas de retenção de build histórico na versão gratuita e limita webhooks. Não há controle granular de permissões — ou o repositório é público (todos podem puxar) ou privado (todos com acesso veem tudo). Não há auditoria nativa de quem puxou qual imagem e quando. Para compliance regulatório (HIPAA, GDPR, PCI-DSS), você precisa de logs detalhados, o que Docker Hub não fornece adequadamente.

GitHub Container Registry: Integração Nativa com GitHub

O GitHub Container Registry (GHCR) é gerenciado pelo GitHub e oferece integração perfeita com GitHub Actions, repositórios e controle de acesso. Cada conta GitHub obtém storage gratuito e pode hospedar imagens privadas sem custo adicional (diferente de Docker Hub que cobra por repositórios privados). A autenticação usa o mesmo token OAuth do GitHub, simplificando gerenciamento de credenciais.

Configurando GHCR e Enviando uma Imagem

O GHCR usa o domínio ghcr.io. Autentique-se usando seu token de acesso pessoal do GitHub (crie em Settings > Developer settings > Personal access tokens com escopos write:packages e read:packages):

echo "seu-token-github" | docker login ghcr.io -u seu-usuario-github --password-stdin

Agora construa e envie uma imagem com a tag GHCR:

docker build -t ghcr.io/seu-usuario-github/meu-app:1.0 .
docker push ghcr.io/seu-usuario-github/meu-app:1.0

A imagem agora está em ghcr.io/seu-usuario-github/meu-app:1.0. Se o repositório for privado, apenas pessoas com acesso ao repositório GitHub podem puxar.

Automação com GitHub Actions

O verdadeiro poder do GHCR é sua integração com GitHub Actions. Crie um workflow que constrói e faz push automaticamente:

name: Construir e Enviar para GHCR

on:
  push:
    branches:
      - main
    tags:
      - 'v*'

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write

    steps:
      - uses: actions/checkout@v3

      - uses: docker/setup-buildx-action@v2

      - uses: docker/login-action@v2
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - uses: docker/build-push-action@v4
        with:
          context: .
          push: true
          tags: |
            ghcr.io/${{ github.repository }}:latest
            ghcr.io/${{ github.repository }}:${{ github.sha }}

Salve esse arquivo em .github/workflows/build-and-push.yml. A partir de agora, cada push na branch main dispara o build automaticamente e envia a imagem para GHCR usando o token do GitHub (nenhuma credencial extra necessária). Você pode usar tags semânticas (v1.0.0) para builds mais específicos.

Harbor: Um Registry Privado Corporativo Robusto

Harbor é um projeto open-source mantido pela Cloud Native Computing Foundation (CNCF) que oferece um registry autohospedado com recursos empresariais: controle de acesso baseado em função (RBAC), varredura de vulnerabilidades integrada, replicação entre registries, webhooks, e auditoria completa. Diferente de Docker Hub ou GHCR, você tem controle total — dados nunca saem de sua infraestrutura.

Instalação de Harbor com Docker Compose

Baixe a versão mais recente:

wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-offline-installer-v2.9.0.tgz
tar xzvf harbor-offline-installer-v2.9.0.tgz
cd harbor

Edite harbor.yml para configurar o hostname e credenciais:

hostname: registry.suaempresa.com

http:
  port: 80

https:
  port: 443
  certificate: /path/to/certificate.crt
  private_key: /path/to/private.key

harbor_admin_password: SenhaForte123!

database:
  password: PasswordBancoDados123!

data_volume: /data/harbor

Gere certificados SSL (ou use Let's Encrypt):

./prepare
docker-compose up -d

Harbor está agora rodando em https://registry.suaempresa.com. Acesse a interface web com admin/SenhaForte123!.

Autenticação e Push para Harbor

Autentique seu cliente Docker:

docker login registry.suaempresa.com

Crie um novo projeto em Harbor (por exemplo, "backend-team") pela interface web. Depois, faça push de uma imagem:

docker build -t registry.suaempresa.com/backend-team/meu-app:1.0 .
docker push registry.suaempresa.com/backend-team/meu-app:1.0

Varredura de Vulnerabilidades Automática

Harbor integra scanners como Trivy para detectar vulnerabilidades em imagens. Na interface web, vá para Administração > Configuração > Scanners e configure um scanner (Trivy é gratuito e recomendado). Agora, toda imagem enviada será automaticamente escaneada:

docker pull registry.suaempresa.com/backend-team/meu-app:1.0

Na interface web, em Projetos > backend-team > Repositórios, você verá um ícone de escaneamento com o nível de risco (crítico, alto, médio, baixo). Imagens com vulnerabilidades críticas podem ser bloqueadas por política — configure isso em Projetos > backend-team > Políticas.

Replicação e Sincronização entre Registries

Suponha que você tenha dois data centers. Configure replicação em Administração > Gerenciamento de Replicação. Crie uma regra que replica todas as imagens de backend-team/* para outro Harbor:

Origem: registry.suaempresa.com/backend-team
Destino: registry-dr.suaempresa.com/backend-team
Evento: Push de imagem

Agora, quando alguém fizer push para o Harbor principal, a imagem é automaticamente replicada para o backup.

RBAC e Controle de Acesso

Harbor implementa controle granular de acesso. Na interface web, crie um usuário deployer com permissão apenas para pull (não push) em Administração > Gerenciamento de Usuários. Depois, em Projetos > backend-team > Membros, adicione deployer com papel "Guest" (apenas pull). Isso garante que apenas desenvolvedores aprovados possam fazer push, enquanto CI/CD pode apenas puxar imagens.

Comparação Prática e Escolha

Para um projeto pessoal ou open-source, Docker Hub é suficiente e gratuito. Para uma organização GitHub com equipes pequenas e sem requisitos de conformidade rigorosa, GHCR é ideal — nenhuma infraestrutura extra, integração com Actions, e control de acesso alinhado com GitHub. Para empresas com múltiplos times, requisitos de compliance (PCI-DSS, HIPAA), ou múltiplos data centers, Harbor é obrigatório.

A tabela abaixo resume as diferenças críticas:

Aspecto Docker Hub GHCR Harbor
Custo Gratuito (público), pago (privado) Gratuito Gratuito (auto-hospedado)
Auditoria Limitada Integrada com GitHub Completa com webhooks
Varredura de Vulnerabilidades Pago (Snyk) GitHub Advanced Security Trivy integrado
RBAC Granular Não Sim (via GitHub) Sim (nativo)
Replicação Não Não Sim
Compliance Regulatório Inadequado Adequado Excelente

Conclusão

Os Container Registries são pilares da entrega contínua. Docker Hub democratizou a distribuição de imagens, mas é inadequado para produção corporativa. GHCR oferece um ponto de equilíbrio para equipes GitHub — gratuito, integrado e suficiente para startups. Harbor é o padrão ouro para empresas que precisam controlar completamente seus artefatos, implementar políticas de segurança rigorosas e auditar cada ação. Sua escolha deve considerar tamanho da organização, requisitos regulatórios e o investimento em infraestrutura que está disposto a fazer. Na maioria dos casos, você não precisa de apenas um — use GHCR para desenvolvimento/testes e Harbor para produção.

Referências

  1. Documentação Oficial do Docker Hub
  2. GitHub Container Registry Documentation
  3. Harbor Project Official Documentation
  4. Cloud Native Computing Foundation - Container Registry Best Practices
  5. Docker Security Best Practices

Artigos relacionados