O Docker

Vamos conhecer o 'Super' Docker

Posted by Diego Aquino on March 16, 2024 · 6 mins read

Docker

Docker é uma plataforma poderosa para desenvolver, distribuir e executar aplicações dentro de contêineres leves e portáteis. Entender os mecanismos internos do Docker é crucial para otimizar seu uso, solucionar problemas e compreender como ele se integra ao sistema subjacente. Aqui estão alguns conceitos fundamentais sobre os mecanismos internos do Docker:

1. Arquitetura do Docker

O Docker usa uma arquitetura cliente-servidor. O cliente Docker se comunica com o daemon Docker (servidor), que é responsável pela construção, execução e distribuição dos contêineres Docker. O cliente e o daemon podem residir no mesmo sistema, ou você pode conectar um cliente Docker a um daemon remoto.

2. Imagens e Contêineres

  • Imagens Docker são modelos somente leitura usados para criar contêineres. Elas incluem o código da aplicação, bibliotecas, ferramentas, dependências e outras partes necessárias para executar uma aplicação.
  • Contêineres Docker são instâncias em execução de imagens Docker. Eles isolam a aplicação do sistema subjacente, garantindo que ela funcione uniformemente, independentemente do ambiente.

3. Registros Docker

Registros Docker são locais de armazenamento para imagens Docker. O Docker Hub é o registro público padrão, mas você pode usar registros privados ou configurar o seu próprio. Os usuários podem baixar (pull) imagens dos registros para usar localmente e carregar (push) suas próprias imagens para os registros para compartilhamento e colaboração.

4. Dockerfile

Um Dockerfile é um script de automação que contém uma lista de instruções para criar uma imagem Docker. Cada instrução no Dockerfile adiciona uma camada à imagem, e cada camada é armazenada de forma eficiente, utilizando o conceito de Copy-On-Write (COW).

5. Rede Docker

O Docker fornece redes virtuais que permitem que contêineres se comuniquem entre si e com o sistema host. A plataforma suporta diferentes tipos de redes (como bridge, host e overlay), permitindo configurar comunicações complexas entre contêineres distribuídos em vários hosts ou clusters.

6. Docker Compose

Docker Compose é uma ferramenta para definir e executar aplicações Docker multicontêiner. Com um arquivo Compose (docker-compose.yml), você pode configurar os serviços da sua aplicação, redes e volumes, e depois executar toda a aplicação com um único comando.

7. Armazenamento Docker

O Docker utiliza volumes, bind mounts e tmpfs mounts para armazenar dados. Enquanto volumes são completamente gerenciados pelo Docker, bind mounts permitem que dados sejam armazenados diretamente no sistema de arquivos do host, e tmpfs mounts armazenam dados na memória do host.

8. Segurança

A segurança no Docker inclui isolar aplicativos em contêineres, gerenciar recursos com políticas de controle de acesso e proteger imagens com assinaturas. O Docker também suporta o uso de namespaces do kernel para isolar recursos e cgroups para controlar a alocação de recursos.

Entender esses componentes internos do Docker oferece uma base sólida para trabalhar com contêineres de forma eficaz, solucionar problemas mais facilmente e otimizar a implementação de suas aplicações.

Diagrama do Docker

Diagrama Docker

Este diagrama representa a arquitetura e as dependências do Docker no contexto do sistema operacional Linux. Vou explicar cada parte:

  • Docker: No topo do diagrama, o Docker é a plataforma central que gerencia contêineres. O ícone do Docker (a baleia carregando contêineres) simboliza a aplicação ou serviço Docker.

  • libcontainer: Antes o Docker dependia de LXC (Linux Containers), mas agora usa sua própria biblioteca chamada libcontainer para interagir com as funcionalidades de contêineres do Linux diretamente, sem a necessidade de uma camada intermediária.

  • libvirt / lxc / systemd-nspawn: Estes são diferentes tecnologias que também podem gerenciar contêineres ou máquinas virtuais no Linux. O Docker era originalmente construído em cima do LXC, mas isso mudou com o desenvolvimento do libcontainer. No entanto, o Docker ainda pode interagir com essas tecnologias se necessário.

  • Linux: Este é o sistema operacional base sobre o qual o Docker está operando. As tecnologias listadas abaixo são funcionalidades do kernel Linux que o Docker utiliza para criar e gerenciar contêineres:

    • cgroups: Abreviação de "control groups", os cgroups são usados para limitar e isolar os recursos utilizados por processos, como uso de CPU, memória, I/O de disco, etc.

    • namespaces: Os namespaces são uma funcionalidade que permite isolar processos de forma que eles não vejam todos os recursos do sistema. Por exemplo, um processo pode ter seu próprio conjunto isolado de interfaces de rede, usuários ou sistemas de arquivos.

    • selinux: É um módulo de segurança no kernel que fornece a capacidade de impor políticas de controle de acesso que restringem os programas.

    • capabilities: Um sistema de segurança no kernel Linux que divide os privilégios do superusuário em conjuntos menores de privilégios para oferecer segurança granular.

    • netlink: Um mecanismo IPC (Inter-process Communication) usado para comunicação entre processos do kernel e espaço de usuário.

    • netfilter: Um framework dentro do kernel Linux para filtrar e manipular pacotes de rede.

    • apparmor: Assim como o SELinux, é um módulo de segurança no kernel que restringe a capacidade dos programas de acessar recursos no sistema.

Este diagrama mostra como o Docker está fortemente integrado ao Linux e depende de várias funcionalidades do kernel Linux para operar. Cada uma dessas tecnologias contribui para a criação de contêineres que são eficientes, seguros e isolados dos outros processos e do host.