Um container registry é um repositório de dados (ou múltiplos repositórios) que armazena imagens de contêineres para armazenamento e/ou acesso. Imagens de contêineres são arquivos estáticos inalterados que contêm código executável e são executados isoladamente na infraestrutura de TI.
Uma vantagem fundamental dos container registries é a facilidade com que eles se conectam a sistemas ou plataformas de orquestração de contêineres, como Kubernetes e Docker.
Durante o desenvolvimento de aplicações baseadas em contêineres, as equipes também podem usar container registries em uma capacidade de DevOps, permitindo integração otimizada com fluxos de trabalho de integração contínua (CI) e fluxos de trabalho de entrega contínua (CD). Ambos os fluxos de trabalho são atividades principais dentro do desenvolvimento de software. A CI e a CD são ambas baseadas em automação e criadas para acomodar alterações frequentes no código. Elas diferem principalmente porque a CI prepara o código para eventual lançamento, enquanto a CD diz respeito ao lançamento real do código. Os container registries são compatíveis com ambos os fluxos de trabalho.
Há dois tipos de container registries:
Um container registry armazena imagens de contêineres, permitindo que os usuários carreguem imagens no registry (um processo chamado "pushing") ou a baixem para um sistema diferente (um processo chamado "pulling").
Um container registry pode ser usado sozinho ou em conjunto com outros container registries. Se vários contêineres forem combinados em uma única unidade operacional para o fornecimento de serviços de nuvem, sua funcionalidade imitará um ecossistema cujos habitantes trabalham em estreita conjunção para fornecer uma produção compartilhada.
Os container registries usam o object storage para manifestar metadados sobre imagens de contêineres. Embora isso forneça um meio para transferir esses metadados com sucesso, é, por natureza, limitado. Por exemplo, no caso de dados que possam envolver várias imagens, há limites para o número possível de tags de listagem disponíveis.
Contêineres de dependência são outro método de armazenamento. Eles permitem o gerenciamento, registro e resolução de dependências em uma aplicação. No contexto da programação, dependências descrevem situações em que um objeto ou processo deve ocorrer antes que outro objeto possa funcionar conforme solicitado.
Essas dependências são gerenciadas por contêineres de dependências, que ajudam a simplificar os testes, aprimorar a escalabilidade e minimizar a necessidade de acoplamento de código (uma interdependência excessivamente forte entre objetos que estão sendo programados), o que pode levar à introdução de erros e problemas de controle de versões.
Dada a necessidade urgente e contínua de segurança online, a autenticação das pessoas que têm acesso aos repositórios é de vital importância. Depende de uma série de permissões específicas para esse container registry. As permissões definem quem está autorizado a usar os recursos do computador a partir de um container registry.
O conceito de tempos de execução é fundamental. Os tempos de execução de contêineres são o software que permite que os contêineres funcionem em um sistema host. Os tempos de execução usam uma série de etapas para criar contêineres. Essas etapas abrangem todo o processo de formação de contêineres e inicialização de seu ambiente de acordo com a orientação de uma imagem de contêiner que contém o aplicativo e suas dependências.
Depois que os contêineres são formados, o tempo de execução permanece ativamente envolvido — administrando ciclos de vida de contêineres, rastreando sua viabilidade contínua e removendo os recursos quando não são mais necessários.
Os Container Registries também são compatíveis com o balanceamento de carga. No balanceamento de carga nativo do contêiner, o tráfego do balanceador é roteado diretamente para as áreas destinadas a receber esse tráfego. Dessa forma, os Container Registries trabalham lado a lado com os balanceadores de carga, eliminando a necessidade de o tráfego ser roteado por meio de um loop de rede extra.
Os container registries oferecem vários benefícios, incluindo os seguintes:
Os container registries fornecem maior clareza operacional por terem um local dedicado para guardar as imagens para armazenamento de longo prazo. Artistas de produção e desenvolvedores de software geralmente enfrentam uma sobrecarga de ativos. Os container registries aliviam esse problema ao confinar os ativos a um único local.
Os container registries ajudam a evitar atrasos de desempenho que podem surgir quando a localização exata das imagens não é conhecida, especialmente em momentos de alta prioridade. Os container registries resolvem isso ao fornecer um inventário que pode ser verificado e confirmado a qualquer momento.
Os registries criam uma fonte única da verdade para qualquer componente ou aplicação e, portanto, há sempre transparência na composição desse componente ou aplicativo. O uso de container registries garante que a iteração mais recente esteja pronta para uso ou replicação, para um controle de versões ideal.
Os container registries apresentam medidas de segurança aprimoradas para imagens. Os protocolos de acesso ajudam a manter as imagens protegidas do ponto de vista da segurança. Enquanto isso, o escaneamento de vulnerabilidades permite que os usuários vejam profundamente suas imagens e identifiquem problemas ocultos dentro delas.
As seguintes atividades fazem uso extenso de container registries:
O desenvolvimento de software é o principal caso de uso dos container registries, e é por isso que eles foram criados em primeiro lugar — para auxiliar os desenvolvedores de software, dando-lhes um espaço de trabalho para armazenar, acessar e compartilhar imagens.
Os container registries privados geralmente são vistos como uma infraestrutura necessária para organizações que estão projetando e entregando aplicativos de software internamente. Os registries privados oferecem aos usuários um maior nível de controle sobre as cadeias de suprimentos de software.
Muitos container registries ajudam os usuários de microsserviços ao esclarecer o processo de localizar e se conectar a microsserviços específicos em um cluster de contêineres. Esses registries oferecem serviços de Sistema de Nomes de Domínio, que fornecem nomes de imagens e IPs virtuais.
Os container registries ajudam a promover a iteração rápida de aplicativos devido à natureza modular e leve dos registries. Outros benefícios da implementação são a portabilidade e a consistência dos registries.
Os container registries estão sendo personalizados para fins científicos especializados, como suporte a dados genéticos e capacitação de pesquisas genômicas. Os resultados da pesquisa podem ser facilmente reproduzidos em outros formatos, permitindo que o código-chave e os artefatos sejam compartilhados.
Existem dois principais provedores de orquestração de contêineres que dominam o uso de container registries:
O Docker é um sistema de orquestração de contêineres desenvolvido e lançado em 2013 para ajudar a reduzir a complexidade da criação, implementação e execução de aplicativos. O Docker ganhou popularidade mais recentemente por ser visto como uma maneira fácil de criar contêineres leves, portáteis e autônomos, que podem ser executados em qualquer plataforma, independentemente da infraestrutura. Essa reputação de facilidade de uso ajudou o Docker a se tornar uma opção ideal para quem implementa aplicações dedicadas à inteligência artificial (IA) e ao aprendizado de máquina (ML).
Da mesma forma, os contêineres do Docker oferecem portabilidade suprema, permitindo que sejam migrados de uma máquina para outra, independentemente de sua infraestrutura. Novamente, vemos uma vantagem em que, com o Docker, é relativamente simples lançar aplicativos de IA e ML em ambientes alternativos, como máquinas locais, dispositivos de edge ou servidores em nuvem.
O Kubernetes é uma plataforma de código aberto para orquestração de contêineres. Também iniciado em 2013 e batizado com o nome de um termo grego para "piloto", o Kubernetes é usado para automatizar vários processos de software, como gerenciamento, implementação e escalonamento.
Em um Kubernetes Service, um ou mais computadores (que podem ser máquinas virtuais ou bare metal servers) estão vinculados em um cluster do Kubernetes, onde cargas de trabalho de contêineres de tamanhos e tipos variados podem ser executadas. O Kubernetes é frequentemente implementado com gráficos Helm, que são coleções de arquivos que funcionam para descrever os vários recursos de um cluster do Kubernetes e, em seguida, empacotar esses recursos combinados como um aplicativo.
O Kubernetes permite o uso de aplicativos de ML conteinerizados e escalonamento simples, além de ser compatível com frameworks e ferramentas de ML. O Kubernetes também pode ser usado como uma plataforma para cargas de trabalho de treinamento de IA.
O Docker e o Kubernetes são semelhantes em muitos aspectos. No entanto, eles diferem na escala que cada um possui porque o Docker é, em sua essência, um tempo de execução de contêineres, enquanto o Kubernetes é uma plataforma completa projetada para acomodar a execução e administração de contêineres de vários tempos de execução de contêineres. Como um indicador da diferença entre os dois, considere que o Kubernetes é grande o suficiente para que o Docker seja apenas um dos vários tempos de execução de contêineres compatíveis com o Kubernetes.
O mercado para provedores de container registries está sempre evoluindo, com participantes entrando e saindo do mercado a qualquer momento. No entanto, os provedores listados aqui construíram reputações duradouras nesse mercado:
O Red Hat OpenShift on IBM Cloud é uma plataforma de contêineres OpenShift (OCP) totalmente gerenciada.
As soluções de contêineres executam e escalam cargas de trabalho conteinerizadas com segurança, inovação de código aberto e implementação rápida.
Libere novos recursos e aumente a agilidade dos negócios com os serviços de consultoria em nuvem da IBM. Descubra como cocriar soluções, acelerar a transformação digital e otimizar o desempenho por meio de estratégias de nuvem híbrida e parcerias especializadas.