Docker

menu icon

Docker

O Docker é uma plataforma de software livre para a desenvolvimento, implementação e gerenciamento de aplicativos conteinerizados. Saiba mais sobre os contêineres, as comparações entre eles e as VMs e por que o Docker é tão amplamente adotado e usado.

O que é o Docker?

O Docker é uma plataforma de <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="c310a57f-c05e-4a52-b5b3-e78ab024cc3b" href="/cloud/learn/containerization" target="_blank">conteinerização</a> de software livre. Ele permite que os desenvolvedores empacotem aplicativos em contêineres, que consistem em componentes executáveis e padronizados que combinam o código-fonte do aplicativo com as bibliotecas e dependências do sistema operacional (S.O.) que são necessárias para executar esse código em qualquer ambiente. Os contêineres simplificam a entrega de aplicativos distribuídos e são cada vez mais populares à medida que as empresas migram para o desenvolvimento nativo de cloud e os ambientes híbridos de <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="91984aaf-759f-4381-a5f9-ca9dc9382b9c" href="/cloud/learn/multicloud" target="_blank">multilcloud</a>.

Os desenvolvedores podem criar contêineres sem o Docker, mas a plataforma facilita, simplifica e protege o desenvolvimento, a implementação e o gerenciamento deles. O Docker é essencialmente um kit de ferramentas que permite que os desenvolvedores criem, implementem, executem, atualizem e parem contêineres por meio de comandos simples e da automatização de economia de trabalho através de uma única API.

Ele também faz referência à <a href="https://www.docker.com/company">Docker, Inc.</a> (link externo à IBM), a empresa que vende a versão comercial do Docker, e ao <a href="https://github.com/docker">Projeto de software livre do Docker</a> (link externo à IBM), que recebe a contribuição da Docker, Inc. e de muitas outras empresas e indivíduos.

Como os contêineres funcionam e por que eles são tão populares

Os <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="cb9ad5a9-e19c-40aa-b50f-4eb715349c5a" href="/cloud/learn/containers" target="_blank">contêineres</a> são possíveis por meio de recursos de virtualização e isolamento de processos integrados ao kernel do Linux. Esses recursos, como <em>grupos de controle</em> (Cgroups) para a alocação de recursos entre processos e <em>namespaces</em> para a restrição do acesso ou da visibilidade de um processo em outros recursos ou áreas do sistema, permitem que diversos componentes de aplicativos compartilhem os recursos de uma única instância do sistema operacional host, basicamente da mesma forma que um hypervisor permite que várias <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="95a9f578-ded4-48f2-8274-b5f1070e9d4f" href="/cloud/learn/virtual-machines" target="_blank">máquinas virtuais (VMs)</a> compartilhem a CPU, a memória e outros recursos de um único servidor de hardware.

Como resultado, a tecnologia de contêiner oferece todas as funcionalidades e benefícios das VMs, incluindo isolamento de aplicativos, escalabilidade com boa relação custo benefício e descartabilidade, além de vantagens adicionais importantes:

  • <strong>Mais leve:</strong> diferentemente das VMs, os contêineres não lidam com a carga útil de uma instância de S.O. inteira e de um hypervisor, incluindo apenas os processos e as dependências do S.O. necessários para executar o código. Eles têm seu tamanho medido em megabytes (em vez de em gigabytes, como em algumas VMs), fazem melhor uso da capacidade de hardware e oferecem tempos de inicialização mais rápidos.
  • <strong>Maior eficiência de recursos:</strong> os contêineres permitem executar várias vezes no mesmo hardware o mesmo número de cópias de um aplicativo que as VMs. Isso pode reduzir seus gastos com a cloud.
  • <strong>Maior produtividade do desenvolvedor:</strong> em comparação com as VMs, os contêineres são mais rápidos e mais fáceis de implementar, provisionar e reiniciar. Isso os torna ideais para uso em pipelines de <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="e183af84-d369-4685-b767-a987079aa9b5" href="/cloud/learn/continuous-integration" target="_blank">integração contínua</a> e <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="3e609fdc-36af-4611-9545-bd7302536ae5" href="/cloud/learn/continuous-delivery" target="_blank">entrega contínua</a> (CI/CD) e mais adequados para equipes de desenvolvimento que adotam práticas de <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="ef041501-2c6b-49a4-ad9e-9e61c91e0435" href="/cloud/learn/devops-a-complete-guide">DevOps</a> e Agile.

As empresas que utilizam os contêineres também relatam outros benefícios, como a melhora da qualidade do app, uma resposta mais rápida às mudanças do mercado, entre outros. Saiba mais com esta ferramenta interativa:

<a data-entity-substitution="" data-entity-type="" data-entity-uuid="" href="https://www.ibm.com/downloads/cas/VG8KRPRM" target="_blank"><strong>Faça o download do relatório completo: <em>Contêineres na empresa</em></strong></a> (PDF, 1,4 MB)

Por que usar o Docker?

O Docker é tão popular atualmente que "Docker" e "contêineres" são usados como sinônimos. No entanto, as primeiras tecnologias relacionadas aos contêineres foram disponibilizadas anos ou <a href="https://blog.aquasec.com/a-brief-history-of-containers-from-1970s-chroot-to-docker-2016">até mesmo décadas</a> (link externo à IBM) antes da liberação pública do Docker em 2013.

Mais notavelmente, em 2008, o <strong>L</strong>inu<strong>XC</strong>ontainers (LXC) foi implementado no kernel do Linux, ativando completamente a virtualização para uma única instância do Linux. Embora o LXC ainda seja usado hoje, há tecnologias mais recentes disponíveis que fazem uso do kernel do Linux.O Ubuntu, um sistema operacional Linux moderno e de software livre, também fornece esse recurso.

O Docker aprimorou os recursos de conteinerização nativos do Linux com tecnologias que permitem:

  • <strong>Portabilidade aprimorada e contínua:</strong> enquanto os contêineres do LXC fazem frequentemente referência a configurações específicas da máquina, os contêineres do Docker são executados sem modificações em nenhuma área de trabalho, data center e ambiente de cloud.
  • <strong>Mais leve e com atualizações mais granulares:</strong> com o LXC, vários processos podem ser combinados em um único contêiner. Com os contêineres do Docker, apenas um processo pode ser executado em cada contêiner. Isso permite o desenvolvimento de um aplicativo que continua em execução enquanto uma das partes do contêiner é colocada off-line para uma atualização ou reparo.
  • <strong>Criação automatizada de contêineres:</strong> o Docker pode criar um contêiner automaticamente com base no código-fonte do aplicativo.
  • <strong>Controle de versões de contêiner:</strong> o Docker pode rastrear as versões de uma imagem de contêiner, retroceder para versões anteriores e rastrear quem e como uma versão foi criada. Além disso, ele também pode fazer o upload apenas dos deltas entre uma versão existente e uma nova.
  • <strong>Reutilização de contêiner:</strong> os contêineres existentes podem ser usados como <em>imagens de base</em> que funcionam como modelos para o desenvolvimento de novos contêineres.
  • <strong>Bibliotecas compartilhadas de contêineres:</strong> os desenvolvedores podem acessar um registro de software livre que contém milhares de contêineres que consistem em contribuições dos usuários.

Hoje, a conteinerização do Docker também funciona com o servidor Microsoft Windows. Além disso, a maioria dos provedores de cloud oferecem serviços específicos para ajudar os desenvolvedores a criar, enviar e executar aplicativos de forma conteinerizada com o Docker.

Por isso, a adoção do Docker teve uma rápida explosão e continua a aumentar. No momento da elaboração deste texto, a Docker Inc. relata<a data-entity-substitution="" data-entity-type="" data-entity-uuid="" href="https://www.docker.com/" target="_blank"> 11 milhões de desenvolvedores e 13 bilhões de downloads de imagens de contêineres todo mês</a> (link externo à IBM).

Ferramentas e termos do Docker

Algumas das ferramentas e terminologias que você encontra ao usar o Docker incluem:

DockerFile

Todo contêiner do Docker começa com um arquivo de texto simples que contém instruções sobre como desenvolver a imagem do contêiner do Docker.O <em>DockerFile</em> automatiza o processo de criação de imagens do Docker. Ele consiste essencialmente em uma lista de instruções da interface da linha de comandos (CLI) que são executadas pelo Docker Engine com o intuito de montar a imagem.

Imagens do Docker

As <em>imagens do Docker</em> contêm um código-fonte de aplicativo executável, além de todas as ferramentas, bibliotecas e dependências que esse código precisa para ser executado como um contêiner. Ao executar a imagem do Docker, ela se torna uma instância (ou várias) do contêiner.

É possível realizar a criação completa de uma imagem do Docker, mas a maioria dos desenvolvedores as extrai de repositórios comuns. Várias imagens do Docker podem ser criadas por meio de uma única imagem de base, compartilhando as mesmas características da solução que as engloba.

As imagens do Docker são compostas de <em>camadas</em> que correspondem individualmente a uma versão da imagem. Sempre que um desenvolvedor faz mudanças na imagem, uma nova camada superior é criada, substituindo a anterior pela versão atual da imagem. As camadas anteriores são salvas para retrocessos ou reutilização em outros projetos.

Sempre que um contêiner é criado por meio de uma imagem do Docker, é criada mais uma nova camada chamada de "camada de contêiner". As mudanças feitas no contêiner, como a inclusão ou exclusão de arquivos, são salvas apenas na camada de contêiner e existem apenas enquanto ele está em execução. Esse processo iterativo de criação de imagem possibilita o aumento da eficiência geral, pois diversas instâncias de contêiner em tempo real podem ser executadas por meio de uma única imagem de base. Quando isso acontece, elas potencializam uso de uma solução comum.

Contêineres do Docker

Os contêineres do Docker são as instâncias de imagens do Docker em tempo real que estão em execução. Enquanto as imagens do Docker consistem em arquivos somente leitura, os contêineres consistem em um conteúdo em tempo real que é efêmero e executável. Os usuários podem interagir com elas e os administradores podem ajustar suas configurações e condições usando comandos do Docker.

Docker Hub

O <a href="https://hub.docker.com/" target="_blank"><em>Docker Hub</em></a> (o link está fora do website da IBM) é o repositório público de imagens do Docker, autodenominado a "maior biblioteca e comunidade do mundo para imagens de contêineres". Ele contém mais de 100.000 imagens de contêineres provenientes de fornecedores de softwares comerciais, projetos de software livre e desenvolvedores individuais. Ele inclui imagens produzidas pela Docker, Inc. e imagens certificadas que pertencem ao registro confiável do Docker, além de milhares de outras imagens.

Todos os usuários do Docker Hub podem compartilhar suas imagens à vontade. Eles também podem fazer o download de imagens de base predefinidas do sistema de arquivos do Docker para usar como ponto de partida para qualquer projeto de conteinerização.

Daemon do Docker

O daemon do Docker é um serviço que é executado em seu sistema operacional, como o Microsoft Windows ou o Apple MacOS ou iOS. Ele cria e gerencia suas imagens do Docker usando os comandos do cliente, além de atuar como o centro de controle de sua implementação do Docker.

Registro do Docker

Um registro do Docker é um sistema de armazenamento e distribuição escalável e de software livre para imagens do Docker. Ele permite rastrear versões de imagens em repositórios com a identificação por meio de tags. Para isso, ele usa o Git, uma ferramenta de controle de versão.

Implementação e orquestração do Docker

Se você estiver executando apenas alguns contêineres, será bastante simples gerenciar seu aplicativo no Docker Engine, o tempo de execução padrão do mercado. No entanto, se sua implementação for composta por milhares de contêineres e centenas de serviços, será praticamente impossível gerenciar este fluxo de trabalho sem a ajuda destas ferramentas especializadas.

Docker Compose

Se você estiver desenvolvendo um aplicativo a partir de processos em vários contêineres que residem no mesmo host, use o <em>Docker Compose</em> para gerenciar a arquitetura do aplicativo.O Docker Compose cria um arquivo YAML que especifica quais serviços estão incluídos no aplicativo e pode implementar e executar contêineres com um único comando. Com ele, também é possível definir volumes persistentes para o armazenamento, especificar nós de base e documentar e configurar as dependências do serviço.

Kubernetes

Para monitorar e gerenciar os ciclos de vida de contêineres em ambientes mais complexos, é preciso utilizar uma ferramenta de <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="4faa1a5c-a946-4f02-bb0a-f5f91fa4d48d" href="/cloud/learn/container-orchestration" target="_blank">orquestração de contêiner</a>. Embora o Docker tenha a própria ferramenta de orquestração (chamada Docker Swarm), a maioria dos desenvolvedores prefere usar o <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="78ea7096-d733-455d-8a2f-90b8d717004d" href="/cloud/learn/kubernetes" target="_blank">Kubernetes</a>.

O Kubernetes é uma plataforma de software livre para a orquestração de contêineres proveniente de um projeto desenvolvido para uso interno no Google.Ele planeja e automatiza tarefas integrais ao gerenciamento de arquiteturas com base em contêiner, incluindo implementação de contêineres, atualizações, descoberta de serviços, provisionamento de armazenamento, <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="b9e82fcd-77a3-4ed2-8cd9-1ed6bcc438aa" href="/cloud/learn/load-balancing" target="_blank">balanceamento de carga</a>, monitoramento de funcionamento e muito mais. Além disso, o ecossistema de software livre de ferramentas para o Kubernetes, incluindo o <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="f8a883a6-e0c8-4142-b4e0-0144b21a03b2" href="/cloud/learn/istio" target="_blank">Istio</a> e o <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="287ac3bd-c722-4974-a7c3-8bce233463bd" href="/cloud/learn/knative" target="_blank">Knative</a>, permite que as empresas implementem uma <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="f5dbe576-e1a4-4a78-b15e-4448e1cf24c1" href="/cloud/learn/paas">plataforma como serviço (PaaS)</a> de alta produtividade para aplicativos conteinerizados e oferecem uma vantagem para a <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="d557f3b3-a74c-4d91-ab58-82dbf6cd5298" href="/cloud/learn/serverless" target="_blank">computação sem servidor</a>.

Para saber mais detalhes sobre o Kubernetes, assista ao vídeo “Kubernetes Explained”:

Kubernetes Explained (10:59)

Docker e IBM Cloud

Uma plataforma corporativa de contêineres fornece orquestração em várias clouds públicas e privadas, a fim de unificar seus ambientes para oferecer melhor desempenho de negócios e operacional. Ela representa um componente importante de uma estratégia de cloud híbrida aberta para evitar a dependência de fornecedor, criar e executar cargas de trabalho em qualquer lugar com consistência e <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="fe46f70e-5ba6-4f86-bb67-1fd34c6cdfd5" href="/cloud/hybrid-infrastructure" target="_blank">otimizar e modernizar toda a sua TI</a>.

Dê o próximo passo:

  • Implemente clusters Kubernetes altamente disponíveis e totalmente gerenciados com o <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="3bbe2e26-f2b4-4c60-99bf-689f19ef3e0a" href="/cloud/openshift" target="_blank">Red Hat OpenShift on IBM Cloud</a>, um serviço OpenShift gerenciado que utiliza a segurança e a escala corporativas da IBM Cloud para automatizar atualizações, ajustes de escala e provisionamentos.
  • Implemente e execute aplicativos em ambientes locais, de computação de borda e de cloud pública de qualquer fornecedor com o <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="02acdac2-46bb-47ab-8f17-f0e2d19e67c5" href="/cloud/satellite" target="_blank">IBM Cloud Satellite</a>, uma solução gerenciada de cloud distribuída.
  • Simplifique e consolide seus data lakes implementando o armazenamento corporativo ativado para contêineres de forma ideal em ambientes on-premises e de cloud pública com as <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="287fcfc9-e29d-4f64-a26f-384c2f4968cd" href="/it-infrastructure/storage/hybrid-cloud-storage" target="_blank">soluções de armazenamento em cloud híbrida da IBM</a>.
  • Simplifique o complexo gerenciamento de TI híbrida com os <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="ed02b600-e1e1-4afa-9c26-5b1986b1ce70" href="/services/cloud/managed" target="_blank">serviços gerenciados da IBM Cloud</a>.

Comece a usar com uma <a href="https://cloud.ibm.com/registration" target="_blank">conta IBM Cloud</a> hoje mesmo.