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.