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.
Em contraste com a abordagem monolítica tradicional de uma aplicação grande e fortemente acoplada, os microsserviços proporcionam um framework arquitetônico nativo da nuvem. Esse framework compõe uma única 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.
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 unidade central de processamento (CPU), memória e outros recursos de um único servidor de hardware.
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:
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.
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 esses recursos nativos de conteinerização usando comandos simples e as automatizem por meio de uma interface de programação de aplicativos (API).
Há muitas vantagens em usar o Docker em relação ao LXC, mais antigo e menos compatível.
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ções em qualquer ambiente de desktop, data center ou computação em nuvem.
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.
O Docker pode criar automaticamente um contêiner com base no código fonte da aplicação.
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 fazer upload apenas dos deltas (lançamentos parciais de módulos de software) entre uma versão existente e uma nova.
Os desenvolvedores podem acessar um registro de código aberto contendo milhares de contêineres de contribuições de 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.
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 developer tools 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 utilizar o Docker Compose para definir volumes persistentes para armazenamento, especificar nós base e documentar e configurar dependências de serviços.
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 à 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 Istio, Knative 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.
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.
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.
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.
De acordo com a Statista, mais de 85% das grandes organizações globais usam microsserviços para o desenvolvimento de aplicações11. 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.
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.
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.
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) 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.
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.
Entenda como as empresas líderes estão usando a tecnologia de contêineres para gerar inovação, escalabilidade e eficiência. Baixe sua cópia agora mesmo.
Descubra como uma estratégia de nuvem híbrida pode gerar flexibilidade, segurança e crescimento para sua empresa. Explore insights de especialistas e estudos de caso do mundo real que mostram por que as empresas líderes estão fazendo a mudança.
O Docker simplifica a implementação de aplicações com contêineres leves e portáteis, garantindo consistência, escalabilidade e eficiência em todos os ambientes. Aperfeiçoe seus processos e melhore o desempenho com o Docker hoje mesmo.
Quer transformar sua empresa com soluções de dados avançadas? Explore como as tecnologias de ponta da IBM ajudam você a aproveitar o poder dos dados, simplificar as operações e obter uma vantagem competitiva.
Saiba como o Kubernetes permite que as empresas lidem com aplicativos de grande escala, aumentem a eficiência dos recursos e agilizem os ciclos de entrega de software. Saiba como a adoção do Kubernetes pode otimizar sua infraestrutura de TI e aumentar sua eficiência operacional.
Melhore a disponibilidade, escalabilidade e segurança da sua infraestrutura explorando as ofertas de balanceamento de carga da IBM. Dê o próximo passo em direção a um gerenciamento de tráfego sem dificuldades hoje mesmo.
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.
1 About Docker, Docker
2 Open Source Projects, Docker
3 Docker Builds, Docker
4 Top 5 containerization technologies in 2024, 6sense
5 A Brief History of Containers: From the 1970s Till Now, Aqua, 10 de janeiro de 2020
6 Docker Hub, Docker
7 Overview of Docker Hub, Docker
8 GitHub
9 Cloud Native Computing Foundation
11 Global Usage of Microservices in Organizations 2021, by Organization Size, Statista, 2023
12 Docker announces Docker AI Boosting Developer Productivity Through Context-Specific, Automated Guidance, Docker, 2023