Nenhum resultado encontrado

Sua pesquisa não corresponde a nenhum resultado.

Sugerimos que você tente o seguinte para ajudar a encontrar o que procura:

  • Verifique a ortografia da sua pesquisa por palavra-chave.
  • Use sinônimos para a palavra-chave digitada; por exemplo, tente “aplicativo” em vez de “software.”
  • Tente uma das pesquisas populares mostradas abaixo.
  • Inicie uma nova pesquisa.
Perguntas Frequentes

Contêineres Docker e Serviços de nuvem de contêineres

Um contêiner é um formato de empacotamento que empacota todo o código e dependências de um aplicativo em um formato padrão que permite sua execução rápida e confiável em ambientes de computação. Um contêiner Docker é um popular contêiner leve, autônomo e executável que inclui tudo o que é necessário para executar um aplicativo, incluindo bibliotecas, ferramentas de sistema, código e tempo de execução. Docker também é uma plataforma de software que permite aos desenvolvedores criar, testar e implantar aplicativos em contêineres rapidamente.

Containers as a Service (CaaS) ou Serviços de contêiner são serviços de nuvem gerenciados que gerenciam o ciclo de vida de contêineres. Os serviços de contêiner ajudam a orquestrar (iniciar, parar, dimensionar) o tempo de execução dos contêineres. Usando serviços de contêiner, você pode simplificar, automatizar e acelerar o desenvolvimento de aplicativos e ciclo de vida de implantação.

Docker e Serviços de contêiner tiveram uma rápida adoção e foram um tremendo sucesso nos últimos anos. De uma tecnologia de código aberto quase desconhecida e bastante técnica em 2013, o Docker evoluiu para um ambiente de tempo de execução padronizado agora com suporte oficial para muitos produtos Oracle Enterprise.

Quem usa o Docker?

O Docker é uma estrutura de desenvolvimento de aplicativos aberta ’projetada para beneficiar DevOps e desenvolvedores. Usando o Docker, os desenvolvedores podem facilmente criar, empacotar, enviar e executar aplicativos como contêineres leves, portáteis e autossuficientes, que podem ser executados em praticamente qualquer lugar. Os contêineres permitem que os desenvolvedores empacotem um aplicativo com todas as suas dependências e o implantem como uma única unidade. Ao fornecer contêineres de aplicativos pré-construídos e autossustentáveis, os desenvolvedores podem se concentrar no código do aplicativo e usá-lo sem se preocupar com o sistema operacional ou sistema de implantação subjacente.

Além disso, os desenvolvedores podem aproveitar milhares de aplicativos de contêiner de código aberto que já foram projetados para serem executados em um contêiner Docker. Para equipes de DevOps, o Docker se presta à integração e ao desenvolvimento contínuos de conjuntos de ferramentas, e reduz as restrições e a complexidade necessárias dentro de sua arquitetura de sistema para implantar e gerenciar os aplicativos. Com a introdução de serviços em nuvem de orquestração de contêiner, qualquer desenvolvedor pode desenvolver aplicativos em contêiner localmente em seu ambiente de desenvolvimento e, em seguida, mover e executar esses aplicativos em contêineres em produção em serviços em nuvem, como serviços Kubernetes gerenciados.

Docker versus Kubernetes

Os contêineres Linux existem desde 2008, mas eles não eram bem conhecidos até o surgimento dos contêineres Docker em 2013. Com o início dos contêineres Docker, surgiu a explosão de interesse no desenvolvimento e na implantação de aplicativos em contêineres. Conforme o número de aplicativos em contêiner cresceu para abranger centenas de contêineres implantados em vários servidores, operá-los se tornou mais complexo. Como você coordena, dimensiona, gerencia e programa centenas de contêineres? Aqui é onde o Kubernetes pode ajudar. Kubernetes é um sistema de orquestração de código aberto que permite que você execute seus contêineres Docker e cargas de trabalho. Ele ajuda a gerenciar as complexidades operacionais ao mudar para escalar vários contêineres implantados em vários servidores. O mecanismo Kubernetes orquestra automaticamente o ciclo de vida do contêiner, distribuindo os contêineres de aplicativos pela infraestrutura de hospedagem. Kubernetes pode aumentar ou diminuir rapidamente os recursos, dependendo da demanda. Ele provisiona, agenda, exclui e monitora continuamente a integridade dos contêineres.

Noções básicas do Docker

Os conceitos básicos de Docker são imagens e contêineres. Uma imagem do Docker contém tudo o que é necessário para executar seu software: o código, um tempo de execução (por exemplo, Java Virtual Machine (JVM), drivers, ferramentas, scripts, bibliotecas, implantações e muito mais.

Um contêiner Docker é uma instância em execução de uma imagem do Docker. No entanto, ao contrário da virtualização tradicional com um hipervisor tipo 1 ou tipo 2, um contêiner Docker é executado no kernel do sistema operacional host. Em uma imagem do Docker, não há sistema operacional separado, conforme ilustrado na Figura 1.

imagem básica do docker
Figura 1

Isolamento vs. Virtualização

Cada contêiner Docker tem seu próprio sistema de arquivos, sua própria pilha de rede (e, portanto, seu próprio endereço IP), seu próprio espaço de processo, e limitações de recursos definidas para CPU e memória. Como um contêiner Docker não precisa inicializar um sistema operacional, ele é inicializado instantaneamente. O Docker se trata de isolamento, ou seja, separar os recursos de um sistema operacional host, em oposição à virtualização, ou seja, fornecer um sistema operacional convidado sobre o sistema operacional host.

VM vs. Kubernetes - Infraestrutura de implantação
imagem do sistema de arquivos incrementais
Figura 2

Sistema de arquivos incrementais

O sistema de arquivos de uma imagem do Docker é dividido em camadas, com semântica de cópia na gravação. Isso permite a herança e a reutilização, poupa recursos no disco e permite o download de imagens incrementais.

Conforme ilustrado na Figura 2, uma imagem do Docker com uma implantação WebLogic poderia ser baseada em uma imagem com um domínio Oracle WebLogic Server, que poderia ser baseada em uma imagem Weblogic, que é baseada em uma imagem do Java Development Kit (JDK) que, por sua vez, é baseada em uma imagem de base do Oracle Linux.

Docker Registry

Embora as imagens do Docker sejam fáceis de criar e os desenvolvedores amem a simplicidade e a portabilidade das imagens do Docker, eles descobriram rapidamente que gerenciar milhares de imagens do Docker é muito desafiador. O Docker Registry resolve este desafio. O Docker Registry é uma forma padrão de armazenar e distribuir imagens do Docker. O Registry é um repositório baseado em código aberto sob a licença Apache permissiva.

O Docker Registry também ajuda a melhorar o controle de acesso e a segurança das imagens do Docker armazenadas em seu repositório. Ele gerencia a distribuição de imagens e também pode se integrar com fluxos de trabalho de desenvolvimento de aplicativos. Os desenvolvedores podem configurar seu próprio Docker Registry ou usar um serviço hospedado do Docker Hub, Oracle Container Registry, Azure Container Registry, etc.

O Docker Hub é um registro do Docker hospedado gerenciado por Docker. O Docker Hub tem mais de 100.000 imagens de contêiner de fornecedores de software, projetos de código aberto e da comunidade. O Docker Hub contém software e aplicativos de repositórios oficiais, como NGINX, Logstash, Apache HTTP, Grafana, MySQL, Ubuntu e Oracle Linux.

Ao iniciar um contêiner, o Docker por padrão puxará automaticamente a imagem correspondente do Docker Hub público se não estiver disponível localmente. Além disso, você também pode criar suas próprias imagens e enviá-las para o Docker Hub em um repositório público ou privado.

Figura 3: Captura de tela do Registro Docker
Figura 3

Docker como um tempo de execução de microsserviços

A ideia de cortar aplicativos monolíticos em pedaços menores de microsserviços atrai muita atenção atualmente entre os desenvolvedores de software.

Os microsserviços são implantados de maneira independente como um processo, usam protocolos leves para se comunicarem uns com os outros, e cada serviço possui seus dados [7]. Como os microsserviços seguem uma abordagem de governança descentralizada, eles exigem uma quantidade bastante alta de automação de infraestrutura, testes automatizados, pipelines de CD totalmente automatizados e equipes de DevOps habilidosas e ágeis.

Ainda há muita discussão sobre esse estilo de arquitetura, mas seria ingênuo supor que um aplicativo decomposto em microsserviços possa ser simplesmente operado como um conjunto de processos. Para citar apenas alguns requisitos, um microsserviço precisa ser independente do host e isolado no nível do sistema operacional. Ele deve ser executado dentro de seus limites de recursos, deve ser escalado para cima e para baixo, reiniciado se falhar e descoberto e conectado a outros microsserviços por meio de uma camada de rede definida por software.

Portanto, executar um microsserviço em um contêiner Docker coloca você em um excelente ponto de partida para atingir a maioria dessas metas.

Docker—Duas dimensões principais

O Docker muda a maneira como criamos, enviamos e executamos software em duas dimensões diferentes:

  • Ele aprimora o processo de obtenção de aplicativos de maneira confiável, do desenvolvimento à produção.
  • Ele fornece um formato de imagem padrão para ir de on-premises para a nuvem.

Ambas as dimensões são explicadas com mais detalhes nos parágrafos a seguir.

Imagem do Docker—Desenvolvimento para produção

Criar uma imagem do Docker com todas as suas dependências resolve o problema "mas funcionou para mim na minha máquina de desenvolvimento". A ideia principal é que uma imagem do Docker seja criada automaticamente por um pipeline de construção de um repositório de código-fonte como o Git e inicialmente testada em um ambiente de desenvolvimento. Essa imagem imutável será então armazenada em um registro do Docker.

Conforme mostrado na Figura 4, a mesma imagem será usada para outros testes de carga, testes de integração, testes de aceitação e muito mais. Em todos os ambientes, a mesma imagem será usada. Pequenas, mas necessárias diferenças ambientais específicas, como um URL do JDBC para um banco de dados de produção, podem ser inseridas no contêiner como variáveis de ambiente ou arquivos.

captura de tela da imagem do docker
Figura 4

As estatísticas mostram que 65% de todos os casos de uso do Docker atuais estão em desenvolvimento e 48% usam o Docker para integração contínua [5].

On-premises para nuvem

O Docker mudou a adoção de nuvens públicas: Por um lado, com uma imagem Docker, pela primeira vez na história, existe um formato de pacote comum que pode ser executado no local, bem como em todos os principais provedores de nuvem. Os contêineres Docker são executados no meu laptop da mesma forma que são executados no Oracle Cloud.

Por outro lado—quando os contêineres Docker são executados em todas as principais nuvens públicas, eles são uma grande contribuição para superar um preconceito de longa data contra as nuvens públicas: bloqueio do fornecedor. Cada grande provedor de nuvem agora oferece o Docker como uma PaaS.

Versões do Docker—Maturidade da tecnologia subjacente

O ritmo dos lançamentos do Docker é muito mais rápido do que o ciclo de lançamento do software empresarial tradicional. Às vezes, o ritmo absoluto dos lançamentos do Docker, junto com a novidade do projeto do Docker, levanta preocupações sobre a segurança e a estabilidade do Docker.

Embora o Docker e sua linha de comando, o Docker daemon, sua API e ferramentas como Docker Swarm, Docker Machine e Docker Compose tenham sido disponibilizadas apenas nos últimos três anos, os recursos subjacentes de kernel têm sido disponibilizados em cada kernel do Linux durante quase uma década.

Um exemplo proeminente de um dos primeiros a adotar a tecnologia de contêiner é a Google. A Google usa contêineres Linux desde antes do Docker existir. Além disso, a Google executa tudo em um contêiner. Estima-se que a Google inicia 2 bilhões de contêineres por semana [3].

Histórico de cgroups and namespaces

Os recursos do kernel do Linux que o Docker usa são cgroups e namespaces. Em 2008, os cgroups foram apresentados ao kernel do Linux com base no trabalho realizado anteriormente por desenvolvedores da Google [1]. Os cgroups limitam e contabilizam o uso de recursos de um conjunto de processos do sistema operacional.

O kernel do Linux usa namespace para isolar os recursos do sistema dos processos uns dos outros. O primeiro namespace, ou seja, o namespace de montagem, foi introduzido já em 2002.

Serviços em nuvem de contêineres

A primeira parte deste artigo explicou alguns conceitos do Docker importantes. No entanto, em um ambiente de produção, não é suficiente simplesmente executar um aplicativo em um contêiner Docker.

Para configurar e operar um ambiente de produção, é necessário hardware para executar os contêineres. Um software como o Docker, juntamente com repositórios e gerenciadores de cluster, deve ser instalado, atualizado e corrigido. Se vários contêineres Docker se comunicarem entre os hosts, uma rede deverá ser criada. Os contêineres em cluster devem ser reiniciados se falharem. Além disso, um conjunto de contêineres vinculados entre si deve ser implantado tão facilmente quanto uma única instância de aplicativo lógica. Um exemplo disso poderia ser um balanceador de carga, alguns servidores da Web, algumas instâncias do Oracle WebLogic Server com um servidor admin, um servidor gerenciado e um banco de dados. Para gerenciar aplicativos em contêineres em escala, é necessário um sistema de orquestração de contêineres como Kubernetes ou Docker Swarm. Implementar, gerenciar e operar sistemas de orquestração como Kubernetes pode ser desafiador e demorado.

Para tornar mais fácil e mais eficiente para os desenvolvedores criarem aplicativos em contêineres, os provedores de nuvem oferecem Serviços em nuvem de contêineres ou Containers as a Service (CaaS). Os Serviços em nuvem de contêineres ajudam os desenvolvedores e as equipes de operações a otimizar e gerenciar o ciclo de vida dos contêineres de maneira automatizada. Esses serviços de orquestração, normalmente construídos usando Kubernetes, tornam mais fácil para as equipes de DevOps gerenciarem e operarem aplicativos em contêineres em escala. O Oracle Container Engine for Kubernetes e o Azure Kubernetes Service são dois exemplos de serviços de nuvem gerenciados por orquestração de contêineres populares.

Oracle Container Engine for Kubernetes é um serviço totalmente gerenciado, escalonável e altamente disponível que você pode usar para implantar seus aplicativos em contêineres na nuvem. Use o Container Engine for Kubernetes (às vezes abreviado para apenas OKE) quando sua equipe de desenvolvimento desejar criar, implantar e gerenciar de maneira confiável aplicativos nativos em nuvem.

Imagens do Docker da Oracle—Abaixo estão algumas fontes para obter ou criar imagens do Docker para produtos Oracle. O repositório do Oracle GitHub para imagens do Docker contém Dockerfiles e amostras para criar imagens do Docker para produtos comerciais Oracle e projetos de código aberto patrocinados pela Oracle.

Laboratório prático do Docker—Desenvolvimento em contêiner com o Docker

Referências

  1. Cgroups (Wikipédia)
  2. Linux Namespaces (Wikipédia)
  3. TUDO na Google é executado em um contêiner, por Jack Clark
  4. Docker Hub atinge 5 bilhões de extrações
  5. Evolução da cadeia de suprimentos de software moderna, Pesquisa Docker 2016
  6. MOS Doc ID 2216342.1: Suporte do Docker para o Oracle DB
  7. Microsserviços, por Martin Fowler
  8. OOracle Container Engine e demonstração do registro (3:13)
  9. Documentação do Container Engine for Kubernetes