Início topics O que é o Docker? O que é Docker?
Crie no Docker dentro do OpenShift Inscreva-se para receber atualizações sobre a nuvem
Ilustração com colagem de pictogramas de monitor de computador, servidor, nuvens, pontos

Publicado em: 6 de junho de 2024
Colaboradores: Stephanie Susnjara, Ian Smalley

O que é Docker?

O Docker é uma plataforma de código aberto que permite aos desenvolvedores construir, implementar, executar, atualizar e gerenciar contêineres.

Contêineres são componentes executáveis padronizados que combinam o código fonte da aplicação com as bibliotecas e dependências do sistema operacional (SO) necessárias para executar esse código em qualquer ambiente.

Vale a pena notar que, quando as pessoas falam sobre o Docker, geralmente se referem ao Docker Engine, o tempo de execução para construir e executar contêineres. Docker também se refere à Docker, Inc.1, a empresa que vende a versão comercial do Docker. Também está relacionado ao projeto de código aberto Docker2, para o qual a Docker, Inc. e muitas outras organizações e indivíduos contribuem.

Os contêineres simplificam o desenvolvimento e a entrega de aplicações distribuídas. Eles se tornaram cada vez mais populares à medida que as organizações migram para o desenvolvimento nativo da nuvem  e ambientes de multinuvem híbrida. Os desenvolvedores podem criar contêineres sem o Docker trabalhando diretamente com recursos integrados ao Linux e outros sistemas operacionais, mas o Docker torna a conteinerização mais rápida e fácil. No momento em que este artigo foi escrito, o Docker relatou que mais de 20 milhões de desenvolvedores usam a plataforma mensalmente3. Como outras tecnologias de conteinerização, incluindo o Kubernetes, o Docker desempenha um papel crucial no desenvolvimento moderno de software, especificamente na arquitetura de microsserviços.

O que são microsserviços?

Em contraste com a abordagem monolítica tradicional de uma aplicação grande e fortemente acoplada, os microsserviços proporcionam uma framework arquitetônica nativa da nuvem. Essa framework compõe uma único aplicação a partir de muitos componentes ou serviços menores, fracamente acoplados e implementáveis de forma independente. Cada serviço pode ser conteinerizado usando o Docker, simplificando a implementação e permitindo que as equipes implantem novas versões e dimensionem as aplicações conforme a necessidade. 

IA generativa e o valor da nuvem híbrida

Saiba como as organizações podem dimensionar o impacto da IA usando a nuvem híbrida para gerar resultados de negócios.

Conteúdo relacionado

Registre-se para receber o guia sobre nuvem híbrida

Como funcionam os contêineres?

Os contêineres são possíveis por meio de isolamento de processos e recursos de virtualização incorporados no kernel do Linux. Esses recursos incluem grupos de controle (Cgroups) para alocar recursos entre processos e namespaces para restringir o acesso ou a visibilidade de um processo a outros recursos ou áreas do sistema.

Os contêineres permitem que múltiplos componentes de aplicações compartilhem os recursos de uma única instância do sistema operacional host. Esse compartilhamento é semelhante a como um hipervisor permite que várias Virtual Machines (VMs) compartilhem uma única unidade de processamento central (CPU) do servidor de hardware, memória e outros recursos. 

A tecnologia de contêineres oferece todas as funções e benefícios das Virtual Machines (VMs), incluindo isolamento de aplicações e escalabilidade econômica, além de outras vantagens significativas:

  • Menor peso: ao contrário das VMs, os contêineres não carregam a carga de uma instância inteira de SO e hipervisor. Eles incluem apenas os processos e dependências do SO necessários para executar o código. Os tamanhos dos contêineres são medidos em megabytes (em vez de gigabytes para algumas VMs), fazem melhor uso da capacidade de hardware e têm tempos de inicialização mais rápidos. 

  • Produtividade melhorada: aplicações conteinerizadas podem ser escritas uma vez e executadas em qualquer lugar. Em comparação com as VMs, os contêineres são mais rápidos e fáceis de implementar, provisionar e reiniciar. 

  • Maior eficiência: com os contêineres, os desenvolvedores podem executar o mesmo número de cópias de uma aplicação no mesmo hardware do que ao usar VMs. Essa eficiência pode reduzir os gastos com a nuvem.

As organizações que usam contêineres relatam muitos outros benefícios, incluindo melhor qualidade dos aplicativos, resposta mais rápida às mudanças do mercado e muito mais. 

Por que usar o Docker e por que ele é tão popular?

Docker é a ferramenta de conteinerização mais utilizada, com 82,84% de participação de mercado.4 O Docker é tão popular hoje que "Docker" e "contêineres" são usados de forma intercambiável. No entanto, as primeiras tecnologias relacionadas a contêineres estavam disponíveis há anos—até mesmo décadas5– antes do Docker ser lançado publicamente como código aberto em 2013. 

De forma notável, em 2008, o LinuXContainers (LXC) foi implementado no kernel do Linux, possibilitando completamente a virtualização para uma única instância do Linux. Embora o LXC ainda seja usado hoje, há tecnologias de kernel do Linux mais recentes disponíveis. O Ubuntu, um sistema operacional Linux moderno e de código aberto, também oferece esse recurso. O Docker permite que os desenvolvedores acessem essas capacidades nativas de conteinerização usando comandos simples e as automatizem por meio de uma interface de programação de aplicativos (API), que economiza trabalho.  

Benefícios do Docker versus LXC

Há muitas vantagens em usar o Docker em relação ao LXC, mais antigo e menos compatível.

Portabilidade de contêineres aprimorada e sem dificuldades

Enquanto os contêineres LXC geralmente fazem referência a configurações específicas da máquina, os contêineres Docker são executados sem modificação em qualquer desktop, data center ou ambiente de computação em nuvem

Atualizações ainda mais leves e granulares

Com o Docker, os desenvolvedores podem combinar vários processos em um único contêiner. Essa flexibilidade permite construir uma aplicação que pode continuar funcionando enquanto uma de suas partes é desativada para atualização ou reparo. 

Criação automatizada de contêineres

O Docker pode criar automaticamente um contêiner com base no código fonte da aplicação. 

Controle de versões de contêineres

O Docker pode rastrear versões de uma imagem de contêiner, reverter para versões anteriores e rastrear quem construiu uma versão e como. O Docker pode até fazer upload apenas dos deltas (lançamentos parciais de módulos de software) entre uma versão existente e uma nova. 

Reutilização de contêineres

Os desenvolvedores podem acessar um registro de código aberto contendo milhares de contêineres contribuídos por usuários. 

Hoje, a conteinerização do Docker também funciona com o Microsoft Windows Server e o Apple MacOS. Os desenvolvedores podem executar contêineres Docker em qualquer sistema operacional. Todos os principais provedores de serviços de nuvem (CSPs), incluindo Amazon Web Services (AWS), Microsoft Azure, Google Cloud Services e IBM Cloud, oferecem serviços específicos para ajudar os desenvolvedores a construir, implementar e executar aplicações conteinerizadas com o Docker.

Arquitetura, termos e ferramentas do Docker

O Docker usa uma arquitetura cliente/servidor. A seguir encontra-se um detalhamento dos principais componentes associados ao Docker, juntamente com com outros termos e ferramentas do Docker.

Host do Docker: um host do Docker é uma máquina física ou virtual que executa o Linux (ou outro SO compatível com o Docker-Engine).

Docker Engine: o Docker Engine é uma aplicação cliente/servidor que consiste no daemon do Docker, uma API do Docker que interage com o daemon e uma interface de linha de comando (CLI) que se comunica com o daemon. 

Daemon do Docker: o daemon do Docker é um serviço que cria e gerencia imagens do Docker usando os comandos do cliente. Essencialmente, o daemon do Docker serve como o centro de controle para a implementação do Docker.

Cliente do Docker: o cliente do Docker fornece a CLI que acessa a API do Docker (uma API REST) para se comunicar com o daemon do Docker por meio de soquetes Unix ou de uma interface de rede. O cliente pode ser conectado a um daemon remotamente, ou um desenvolvedor pode executar o daemon e o cliente no mesmo sistema de computador.

Objetos do Docker: os objetos do Docker são componentes de uma implementação do Docker que ajudam a empacotar e distribuir aplicações. Eles incluem imagens, contêineres, redes, volumes, plug-ins e muito mais.

Contêineres do Docker : os contêineres do Docker são instâncias ativas e em execução de imagens do Docker. Enquanto as imagens do Docker são arquivos somente leitura, os contêineres são conteúdos executáveis e efêmeros. Os usuários podem interagir com eles, e os administradores podem ajustar suas configurações e condições usando comandos do Docker. 

Imagens do Docker: as imagens do Docker contêm código fonte executável da aplicação e todas as ferramentas, bibliotecas e dependências de que o código da aplicação precisa para ser executado como um contêiner. Quando um desenvolvedor executa a imagem do Docker, ela se torna uma instância (ou várias instâncias) do contêiner. 

É possível criar imagens do Docker do zero, mas a maioria dos desenvolvedores as extrai de repositórios comuns. Os desenvolvedores podem criar várias imagens do Docker a partir de uma única imagem de base e compartilharão os pontos em comum de sua stack. 

As imagens do Docker são compostas por camadas, e cada camada corresponde a uma versão da imagem. Sempre que um desenvolvedor faz alterações na imagem, uma nova camada superior é criada, substituindo a camada superior anterior como a versão atual da imagem. Camadas anteriores são salvas para reversões ou para serem reutilizadas em outros projetos. 

Cada vez que um contêiner é criado a partir de uma imagem do Docker, outra nova camada (chamada camada do contêiner) é criada. As alterações feitas no contêiner, como adicionar ou excluir arquivos, são salvas na camada do contêiner, e essas alterações só existem enquanto o contêiner está em execução.

Esse processo iterativo de criação de imagens aumenta a eficiência geral, já que várias instâncias de contêineres ao vivo podem ser executadas a partir de uma única imagem base. Quando o fazem, usam uma stack comum. 

Docker build: o Docker build é um comando que possui ferramentas e recursos para criar imagens do Docker.

Dockerfile: todo contêiner do Docker começa com um arquivo de texto simples contendo instruções sobre como construir a imagem do contêiner do Docker. O Dockerfile automatiza o processo de criação de imagens do Docker. É essencialmente uma lista de instruções CLI que o Docker Engine executará para montar a imagem. A lista de comandos do Docker é vasta, mas padronizada: as operações do Docker funcionam da mesma forma, independentemente dos conteúdos, da infraestrutura ou de outras variáveis de ambiente. 

Documentação do Docker: a documentação do Docker, ou docs do Docker, refere-se à biblioteca oficial de recursos, manuais e guias do Docker para criar aplicações conteinerizadas.

Docker Hub: o Docker Hub6 é o repositório público de imagens do Docker, que se autodenomina a maior biblioteca e comunidade do mundo para imagens de contêineres7. Ele contém mais de 100.000 imagens de contêineres provenientes de fornecedores de software comerciais, projetos de código aberto e desenvolvedores individuais. O Docker Hub inclui imagens produzidas pela Docker, Inc., imagens certificadas pertencentes ao Docker Trusted Registry e milhares de outras imagens. 

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

Existem outros repositórios de imagens, incluindo o GitHub8. O GitHub é um serviço de hospedagem de repositórios bem conhecido por suas ferramentas de desenvolvimento de aplicações e como uma plataforma que promove a colaboração e a comunicação. Os usuários do Docker Hub podem criar um repositório (repo) que pode conter muitas imagens. O repositório pode ser público ou privado e vinculado a contas do GitHub ou BitBucket. 

Docker Desktop: o Docker Desktop é uma aplicação para Mac ou Windows que inclui o Docker Engine, cliente Docker CLI, Docker Compose, Kubernetes e outros. Ele também fornece acesso ao Docker Hub. 

Registro do Docker: um registro do Docker é um sistema de armazenamento e distribuição escalável e de código aberto para imagens do Docker. Ele permite que os desenvolvedores rastreiem versões de imagens em repositórios usando marcação para identificação. Esse rastreamento e identificação são realizados usando o Git, uma ferramenta de controle de versões. 

Plug-ins do Docker: os desenvolvedores usam plug-ins para tornar o Docker Engine ainda mais funcional. Vários plug-ins do Docker compatíveis com autorização, volume e rede estão incluídos no sistema de plug-in do Docker Engine; plug-ins de terceiros também podem ser carregados. 

Extensões do Docker: as extensões do Docker permitem que os desenvolvedores usem ferramentas de terceiros no Docker Desktop para estender suas funções. As extensões para ferramentas de desenvolvedor incluem desenvolvimento de aplicativos Kubernetes, segurança, observabilidade e muito mais. 

Docker Compose: os desenvolvedores podem usar o Docker Compose para gerenciar aplicações multicontêineres, onde todos os contêineres são executados no mesmo host do Docker. O Docker Compose cria um arquivo YAML (.YML) que especifica quais serviços estão incluídos na aplicação e pode implementar e executar contêineres com um único comando. Como a sintaxe YAML é indiferente em relação à linguagem, arquivos YAML podem ser usados em programas desenvolvidos em Java, Python, Ruby e muitas outras linguagens. 

Os desenvolvedores também podem usar o Docker Compose para definir volumes persistentes para armazenamento, especificar nós base e documentar e configurar dependências de serviços.

Kubernetes e orquestração de contêineres

Ao executar apenas alguns contêineres, gerenciar uma aplicação no Docker Engine, o tempo de execução de fato do setor, é bastante simples. No entanto, para implementações que abrangem milhares de contêineres e centenas de serviços, é quase impossível monitorar e gerenciar ciclos de vida de contêineres sem uma ferramenta de orquestração de contêineres

Enquanto o Docker inclui sua própria ferramenta de orquestração (chamada Docker Swarm), o Kubernetes é o padrão do setor. Outras plataformas populares de orquestração de contêineres incluem o Apache Mesos e o Nomad.

O Kubernetes é uma plataforma de orquestração de contêineres de código aberto que descende de um projeto desenvolvido para uso interno no Google. Apresentado ao público em 2014, o Kubernetes agenda e automatiza tarefas essenciais para o gerenciamento de arquiteturas baseadas em contêineres, incluindo implementação de contêineres, atualizações, descoberta de serviços, provisionamento de armazenamento, balanceamento de carga, monitoramento de integridade e muito mais. Em 2015, o Google doou o Kubernetes para a Cloud Native Computing Foundation (CNCF)9, o hub de computação nativo da nuvem de código aberto e independente de fornecedores. 

Além disso, o ecossistema de ferramentas de código aberto para o Kubernetes, incluindo o IstioKnative e Tekton, permite que as organizações implementem uma plataforma como serviço (PaaS) de alta produtividade para aplicações conteinerizadas. Este ecossistema também oferece uma transição mais rápida para a computação sem servidor.

Padrões do Docker e do setor de contêineres

Fundada em 2015, depois que a Docker doou a especificação das imagens de contêineres e o código de tempo de execução, a Open Container Initiative (OCI)10 é um projeto da Linux Foundation comprometido com a criação de padrões abertos do setor em relação ao formato de imagens de contêineres e do tempo de execução. A OCI consiste em empresas líderes, incluindo Docker, IBM e Red Hat. Ela apoia a inovação e, ao mesmo tempo, ajuda as organizações a evitar o lock-in com fornecedor. 

Embora o Docker seja a tecnologia de contêineres mais conhecida e usada, o ecossistema mais amplo padronizou o containerd e outras alternativas, incluindo LXC, CRI-O, Podman e outros. Em 2017, a Docker doou o projeto containerd à CNCF. O containerd é um tempo de execução de contêineres padrão do setor que usa runc e é o tempo de execução de contêineres principal do Docker Engine.

Segurança do Docker

A complexidade que envolve as cargas de trabalho conteinerizadas exige a implementação e a manutenção de controles de segurança que protejam os contêineres e sua infraestrutura subjacente. As práticas de segurança de contêineres do Docker são projetadas para proteger os aplicativos conteinerizados contra riscos como violações de segurança, malware e agentes mal-intencionados. 

Como os contêineres do Docker são isolados uns dos outros e do sistema host, eles têm um nível inerente de segurança por design. No entanto, esse isolamento não é absoluto. A segurança do Docker gira em torno de uma framework holística zero trust, que engloba o tempo de execução, a construção e a orquestração de contêineres. 

A necessidade do Docker e de outras seguranças relacionadas a contêineres aumentou a popularidade do DevSecOps. Que é uma abordagem de segurança que automatiza a integração de práticas de segurança em todas as fases do ciclo de vida do desenvolvimento de software, abrangendo o design inicial até a integração, testes, entrega e implementação. Além disso, as melhores práticas de segurança do Docker incluem ferramentas e soluções de segurança de contêineres de terceiros, incluindo varredura e monitoramento, que podem detectar problemas de segurança antes que eles afetem a produção.

Casos de uso do Docker
Migração para a cloud

A portabilidade do Docker simplifica e acelera o processo de migração para a nuvem de diversos ambientes, seja movendo dados, aplicações e cargas de trabalho de um data center local para uma infraestrutura baseada em nuvem ou de um ambiente de nuvem para outro.

Arquitetura de microsserviços (microsserviços)

De acordo com a Statista, mais de 85% das grandes organizações globais usam microsserviços para o desenvolvimento de aplicativos11. O Docker simplifica a implementação de aplicativos, pois cada microsserviço pode ser conteinerizado e dimensionado e gerenciado de forma independente, eliminando assim a necessidade de os desenvolvedores configurarem e gerenciarem ambientes específicos. 

Integração contínua e entrega contínua (CI/CD)

O Docker é ideal para pipelines de integração contínua e entrega contínua (CI/CD), pois fornece um ambiente consistente para testar e implementar aplicações, reduzindo possíveis erros durante a implementação.

DevOps

A combinação de microsserviços como uma abordagem de desenvolvimento de software e o Docker cria uma base sólida para as equipes de DevOps. Isso permite que elas adotem práticas ágeis para que possam iterar e experimentar rapidamente, o que é crucial para fornecer software e serviços na velocidade exigida pelo mercado. 

Implementação de multinuvem híbrida

Uma tecnologia conteinerizada leve como o Docker facilita a migração de aplicações entre diferentes ambientes. Todos os principais provedores de serviços de nuvem oferecem serviços de desenvolvimento e gerenciamento relacionados ao Docker compatíveis com a execução do Docker em ambientes de nuvem híbrida, que unificam configurações locais, de nuvem pública, de nuvem privada e de edge . O Docker pode ser facilmente implementado em infraestrutura de TI multinuvem, que se refere a serviços de nuvem de mais de um fornecedor de nuvem.

Contêineres como serviço (CaaS)

Contêineres como serviço (CaaS) permite que os desenvolvedores gerenciem e implementem aplicações conteinerizadas, facilitando a execução de contêineres Docker em escala. Todos os principais CSPs oferecem CaaS como parte de seus portfólios de serviços de nuvem, juntamente com infraestrutura como serviço (IaaS), software como serviço (SaaS) e assim por diante.

Inteligência artificial/aprendizado de máquina (IA/ML)

O Docker acelera o desenvolvimento da inteligência artificial e do aprendizado de máquina com o desenvolvimento rápido, fácil e portátil de aplicações, acelerando a inovação e o tempo de lançamento no mercado. Além disso, o Docker Hub abriga centenas de imagens de IA/ML que apoiam ainda mais as equipes de desenvolvimento de IA/ML. Em 2023, a Docker lançou o Docker AI12, que oferece aos desenvolvedores orientação automatizada específica do contexto quando estão editando um arquivo Dockerfile ou Docker Compose.

Soluções relacionadas
Red Hat OpenShift on IBM Cloud

Explore como o Red Hat OpenShift on IBM Cloud utiliza o Red Hat OpenShift em ambientes públicos e híbridos para velocidade, capacidade de resposta ao mercado, escalabilidade e confiabilidade.

Conheça o Red Hat OpenShift on IBM Cloud
IBM Cloud Satellite

Use o IBM Cloud Satellite para iniciar serviços de nuvem consistentes em qualquer lugar — no local, na edge e em ambientes de nuvem pública.

Explore o IBM Cloud satélite
Soluções de nuvem híbrida

Avance na sua jornada de nuvem e IA. Comece avaliando os investimentos em TI e projetando uma base aberta e integrada que possa ser acessada de forma rápida e consistente em todos os ambientes digitais.

Explore as soluções de nuvem híbrida
IBM Cloud Container Registry

Armazene e distribua imagens de contêineres em um registro privado totalmente gerenciado. Envie imagens privadas para serem executadas convenientemente no IBM Cloud Kubernetes Service e em outros ambientes de tempo de execução. 

Explore o IBM Cloud Container Registry
Dê o próximo passo

O Red Hat OpenShift no IBM Cloud oferece aos desenvolvedores uma maneira rápida e segura de conteinerizar e implementar cargas de trabalho corporativas em clusters Kubernetes. Transfira tarefas tediosas e repetitivas que envolvem gerenciamento de segurança, gerenciamento de conformidade, gerenciamento de implementação e gerenciamento contínuo do ciclo de vida. 

Conheça o Red Hat OpenShift on IBM Cloud Comece a usar sem custos
Notas de rodapé

About Docker (link externo a ibm.com), Docker

Open Source Projects, (link externo a ibm.com), Docker

3 Docker Builds, (link externo a ibm.com), Docker

4 Top 5 containerization technologies in 2024, (link externo a ibm.com), 6sense

5 A Brief History of Containers: From the 1970s Till Now, (link externo a ibm.com) Aqua, 10 de janeiro de 2020

6 Docker Hub, (link externo a ibm.com), Docker

7 Overview of Docker Hub, (link externo a ibm.com), Docker

GitHub, (link externo a ibm.com)

9 Cloud Native Computing Foundation(link externo a ibm.com)

10 Open Container Initiative, (link externo a ibm.com)

11 Global Usage of Microservices in Organizations 2021, by Organization Size, (link externo a ibm.com), Statista, 2023

12 Docker announces Docker AI Boosting Developer Productivity Through Context-Specific, Automated Guidance, (link externo a ibm.com), Docker, 2023