Ferramentas do Docker
O vasto ecossistema do Docker oferece aos programadores inúmeras opções para implementar aplicações e orquestrar contentores, entre outras funcionalidades. A seguir, apresentamos as ferramentas do Docker mais importantes e os projetos de terceiros mais populares que estão a desenvolver ferramentas de código aberto para o Docker.
As ferramentas mais básicas do Docker e os seus componentes
Hoje em dia, o Docker é muito mais do que uma plataforma leve para a gestão de contentores de software. Para tornar a implementação de aplicações em infraestruturas e ambientes de nuvem distribuídos mais simples, rápida e flexível, a equipa de desenvolvimento disponibilizou várias ferramentas do Docker que oferecem aos utilizadores funcionalidades de cluster e orquestração, um mercado central de aplicações e uma ferramenta para gerir recursos na nuvem.
Docker Engine
Quando se fala do Docker, geralmente refere-se à aplicação cliente-servidor de código aberto na qual se baseia a plataforma de contentores, que, na sua própria nomenclatura, é designada por Docker Engine. Os componentes centrais do motor do Docker são o Docker Daemon, uma API baseada em REST e uma CLI (Command Line Interface) como interface de utilizador. É esta estrutura que permite controlar o motor do Docker através de comandos e gerir as imagens, os ficheiros do Docker e os contentores a partir do terminal. O cliente e o daemon podem estar localizados em sistemas diferentes. Pode encontrar uma apresentação geral dos comandos mais importantes do Docker no nosso artigo adicional.

Docker Hub
Com o Docker Hub, os utilizadores têm à disposição um servidor de registos na nuvem a partir do qual podem descarregar, gerir e partilhar imagens Docker. Após o registo, os utilizadores podem optar por guardar as imagens em repositórios públicos ou privados. Um sistema integrado de etiquetas permite o controlo de versões das imagens.
Para além dos repositórios públicos de outros utilizadores, no Docker Hub também se encontram vários recursos disponibilizados por equipas de desenvolvimento e projetos de código aberto de renome em arquivos de imagens oficiais. Entre as imagens Docker mais populares contam-se o servidor web NGINX, a base de dados In-Memory Redis, o conjunto de ferramentas Linux BusyBox e a distribuição Linux Ubuntu.

Outra funcionalidade do Docker Hub são as chamadas «organizações», grupos de trabalho que permitem aos utilizadores da plataforma partilhar repositórios privados com determinados círculos. Os direitos de acesso são geridos internamente através de equipas e afiliações a grupos.
Docker Swarm
O Docker Engine inclui funcionalidades nativas que permitem ao utilizador gerir hosts Docker em clusters, denominados «swarms» («enxames»). Estas funcionalidades de gestão de clusters e orquestração integradas no Docker Engine baseiam-se na toolbox Swarmkit.
A ferramenta de clustering nativa Swarm agrupa uma série de hosts Docker num único host virtual e utiliza a API do Docker para que qualquer ferramenta Docker que esteja em contacto com o Docker Daemon possa aceder ao Swarm e seja possível escalar para um determinado número de hosts. Os utilizadores utilizam a CLI do motor Docker para criar enxames, distribuir aplicações no cluster e controlar o comportamento do enxame. Não requer software de orquestração adicional.
Os Docker Engines que foram agrupados em clusters funcionam no modo swarm. Este modo é ativado para criar um novo cluster ou para adicionar um host já existente a um swarm. Cada um dos hosts num cluster passa a ser um «nó» e estes nós podem ser executados como hosts virtuais no mesmo sistema local, embora a variante mais comum consista numa estrutura baseada na nuvem, na qual os nós do swarm são distribuídos por vários sistemas e infraestruturas.
Na base deste software encontra-se uma arquitetura mestre-escravo: quando é necessário distribuir tarefas no enxame, os utilizadores transferem um chamado «serviço» para o nó gestor, que atua como mestre no cluster. Este mestre é responsável pelo planeamento dos contentores no cluster e funciona como interface principal para aceder aos recursos do Swarm.
O nó gestor envia cada unidade de trabalho separadamente, as chamadas «tasks» (tarefas), para nós subordinados, conhecidos como «worker nodes» (nós de trabalho) na terminologia do Docker.
- Serviços: os serviços são estruturas centrais nos clusters Docker. Um serviço é um grupo de contentores baseados na mesma imagem e define as tarefas a executar no cluster. Um utilizador que cria um serviço especifica nele quais as imagens a utilizar e quais os comandos a executar. Também oferecem a possibilidade de escalar aplicações. Para tal, os utilizadores do Docker apenas têm de definir quantos contentores devem ser iniciados para um serviço.
- Tarefas: para poder distribuir serviços no cluster, o nó mestre divide-os em unidades independentes ou tarefas. Cada uma delas inclui um contentor e os comandos que são executados nele.
Além das funções de gestão do cluster e de orquestração dos contentores, os nós mestres também desempenham funções de nós de trabalho na configuração padrão, a menos que o utilizador limite as suas funções às tarefas de gestão.
Em cada nó de trabalho, é executado um programa agente (agent program). Este programa recebe as tarefas e envia ao nó mestre correspondente relatórios sobre o andamento da tarefa que transferiu. O gráfico seguinte representa, em linhas gerais, um enxame Docker:

Quando se trata de implementar um Docker Swarm, os utilizadores recorrem frequentemente ao Docker Machine.
Docker Compose
O Docker Compose permite ligar vários contentores e executá-los com um único comando. O seu componente fundamental é um ficheiro de controlo central baseado na linguagem de marcação YAML. A sintaxe deste ficheiro assemelha-se à do software de código aberto Vagrant, utilizado na criação e aprovisionamento de máquinas virtuais.
No ficheiro docker-compose.yml, é possível definir quantos contentores de software se desejar, incluindo todas as dependências, bem como as suas inter-relações. O esquema seguido para gerir aplicações com vários contentores não difere do necessário para gerir contentores simples. Com o comando docker-compose e o subcomando correspondente, é possível gerir todo o ciclo de vida da aplicação.
Esta ferramenta de orquestração pode ser facilmente integrada num cluster baseado no Swarm. As aplicações com vários contentores criadas com o Compose executam-se em sistemas distribuídos com a mesma facilidade que em hosts isolados.
Outra característica do Docker Compose é o seu mecanismo de escalabilidade integrado: através da linha de comandos, esta ferramenta do Docker permite definir quantos contentores devem ser iniciados para um determinado serviço.
Ferramentas Docker de fornecedores externos
Para além destes programas desenvolvidos pela Docker Inc., alguns fornecedores externos também se decidiram a desenvolver ferramentas e plataformas que, ou bem se podem ligar ao Docker Engine, ou foram desenvolvidas exclusivamente para a popular plataforma. Entre a diversidade de projetos de código aberto abrangidos pelo ecossistema do Docker, destacam-se a ferramenta de orquestração Kubernetes, o sistema de gestão de clusters Shipyard, a solução de implementação de aplicações multicontainer Panamax, a plataforma de integração contínua Drone, o sistema operativo na nuvem OpenStack e o sistema operativo para centros de dados D2iQ DC/OS, baseado no gestor de clusters Mesos.
Kubernetes
Houve uma altura em que o Docker não conseguia fornecer ferramentas próprias de orquestração, como o Swarm e o Compose. É por isso que, há já vários anos, inúmeras empresas investem no desenvolvimento de ferramentas personalizadas para facilitar o funcionamento da plataforma de contentores em infraestruturas de grande dimensão e distribuídas. Entre as soluções mais conhecidas deste tipo encontra-se o projeto de código aberto Kubernetes.
O Kubernetes é um gestor de clusters para aplicações em contêineres. O seu objetivo é automatizar a gestão de aplicações em clusters. Para tal, esta ferramenta de orquestração utiliza uma API REST, um programa de linha de comandos e uma interface web gráfica como interfaces de controlo, através das quais é possível executar automatizações e solicitar relatórios de estado. Os utilizadores utilizam o Kubernetes para:
- Executar aplicações em contêineres num cluster
- Instalar e gerir aplicações em sistemas distribuídos
- Escalar aplicações
- Aproveitar ao máximo o hardware disponível
Para tal, o Kubernetes agrupa os contentores em unidades lógicas, os chamados «pods», que constituem as unidades básicas do gestor e que podem ser distribuídas pelo cluster através do método de agendamento.
Tal como o Swarm, também o Kubernetes assenta na arquitetura mestre-escravo: um cluster é composto por um mestre (Kubernetes Master) e por vários escravos ou Kubernetes Nodes (também chamados de Worker ou Minions). O mestre atua como nível de controlo central (Control Plane) no cluster e é composto por quatro elementos básicos que permitem coordenar a comunicação no interior do cluster e distribuir as tarefas: um servidor API, a memória de configuração etcd, um scheduler e um Controller Manager.
- Servidor API: num cluster Kubernetes, todos os processos automatizados são executados num servidor API através de uma API REST. Este servidor funciona como ponto central de gestão no cluster.
- etcd: este armazenamento de chave-valor de código aberto pode ser considerado a memória de um cluster Kubernetes. Desenvolvido pela CoreOS especialmente para sistemas distribuídos, o etcd armazena dados de configuração e disponibiliza-os aos nós. Isto permite gerir o estado atual do cluster a qualquer momento.
- Scheduler: a função do agendador consiste em distribuir os pods pelo cluster, para o que determina quantos recursos um pod necessita e os ajusta aos recursos disponíveis em cada nó do cluster.
- Controller Manager: este é um serviço do mestre do Kubernetes que regula o estado do cluster e executa tarefas de rotina, dirigindo assim a orquestração. A principal responsabilidade do «gestor do controlador» é garantir que o estado do cluster corresponda ao estado previamente definido como objetivo.
Estes quatro componentes de um servidor mestre podem estar localizados num único servidor ou distribuídos por vários servidores num cluster de alta disponibilidade.
Enquanto o mestre é responsável pela orquestração, os pods distribuídos no cluster são executados nos nós (hosts subordinados ao host mestre). Para tal, em cada nó tem de estar em execução um Container Engine, na prática o Docker, embora o Kubernetes não esteja vinculado a nenhum motor de contentores em particular.
Para além do Container Engine, os nós do Kubernetes também incluem os seguintes componentes:
- kubelet: este nome designa um agente que, ao ser executado em cada nó, o controla e gere. Como principal ponto de contacto nos nós, o kubelet mantém a comunicação com o mestre e assegura que a informação seja enviada para o nível de controlo e que este a receba.
- kube-proxy: além disso, em cada nó do Kubernetes, também é executado este serviço de proxy responsável por garantir que as solicitações provenientes do exterior sejam enviadas para o contentor correspondente e por fornecer serviços aos utilizadores de aplicações em contentores. Além disso, o kube-proxy oferece um balanceamento de carga básico.
O gráfico seguinte mostra esquematicamente a arquitetura mestre-escravo na qual se baseia a plataforma de orquestração Kubernetes:

As funcionalidades do Kubernetes podem ser ampliadas com um vasto leque de ferramentas e extensões. Entre as mais conhecidas encontram-se as ferramentas de monitorização e diagnóstico de erros Prometheus, Weave Scope e sysdig, bem como o gestor de pacotes Helm. A estas juntam-se alguns plugins para o Apache Maven e o Gradle, bem como uma API Java para controlar o Kubernetes remotamente.
Estaleiro
O Shipyard é uma solução de gestão desenvolvida pela comunidade de utilizadores do Docker, baseada no Swarm, que permite aos utilizadores gerir recursos da plataforma, tais como contentores, imagens, hosts e repositórios privados, através de uma interface gráfica de utilizador. O Shipyard está disponível como aplicação web.
O programa é totalmente compatível com a Remote API do Docker e utiliza a base de dados NoSQL de código aberto RethinkDB para armazenar contas de utilizador, endereços e eventos. Além de fornecer funcionalidades de gestão de clusters numa interface web central, a ferramenta inclui também uma funcionalidade de verificação de utilizadores e uma de controlo de acesso baseado em funções.
O software baseia-se no kit de ferramentas de gestão de clusters Citadel e é composto, essencialmente, por três elementos: Controller, API e UI.
- Shipyard Controller: este componente constitui o coração do Shipyard. O controlador interage com a base de dados RethinkDB para armazenar a informação e permite a comunicação com os hosts num cluster Docker, bem como o controlo dos eventos.
- API do Shipyard: a API do Shipyard é baseada em REST. Todas as funções da ferramenta de gestão são controladas por ela.
- Interface de Utilizador (UI) do Shipyard: a interface de utilizador do Shipyard é uma aplicação AngularJS que fornece aos utilizadores uma interface gráfica para gerir os clusters Docker no navegador. Todas as interações na interface de utilizador ocorrem através da API do Shipyard.
No site oficial do Shipyard, pode conhecer em profundidade este projeto de código aberto.
Panamax
A equipa de programadores da ferramenta de código aberto Docker Panamax propôs-se simplificar a implementação de aplicações com vários contentores. A ferramenta oferece aos utilizadores uma interface gráfica que permite desenvolver, implementar e distribuir aplicações complexas baseadas em contentores Docker de forma simples, através de arrastar e largar.
O Panamax permite guardar estas aplicações sob a forma de modelos de aplicação e distribuí-las em estruturas de cluster com grande facilidade. Através de um App Marketplace integrado na ferramenta e alojado no GitHub, estes modelos podem ser guardados e publicados em repositórios Git. Os componentes fundamentais da arquitetura do Panamax podem ser subdivididos em dois grupos: costuma-se distinguir entre o cliente local do Panamax, por um lado, e um número aleatório de Remote Deployment Targets, por outro.
O cliente local do Panamax (Panamax Local Client) é o principal componente das ferramentas Docker. É executado no sistema local e permite criar aplicações complexas em contêineres. O Panamax Local Client é composto pelos seguintes componentes:
- CoreOS: a instalação do cliente local do Panamax pressupõe a utilização da distribuição Linux CoreOS, especialmente orientada para software de contenedorização, como sistema anfitrião. Com o Panamax, os utilizadores têm à sua disposição não só as funcionalidades próprias do Docker, mas também várias funcionalidades do CoreOS, entre as quais se incluem o Fleet e o Journalctl.
- Fleet: em vez de interagir diretamente com o Docker, o cliente do Panamax utiliza o Fleet para coordenar os contentores. O Fleet é um gestor de clusters que controla o daemon systemd do Linux em clusters de computadores.
- Journalctl: o cliente do Panamax utiliza esta função para solicitar notificações de log do systemd a partir do Journal.
- Instalador do Cliente Local: o instalador do cliente local contém todos os componentes necessários para instalar o cliente Panamax num sistema local.
- Agente Local do Panamax: o chamado agente local é o componente principal do cliente local e mantém o contacto com outros componentes e dependências através da API do Panamax. Entre estes contam-se o host local do Docker, a interface de utilizador do Panamax, os servidores de registo externos, bem como os agentes remotos nos Alvos de Implementação do cluster. Com o objetivo de trocar informações sobre aplicações em execução, o agente local interage no sistema local através da API do Panamax com as seguintes interfaces de programação:
- API Remota do Docker: através da API remota do Docker, o Panamax procura imagens no sistema local e solicita informações de estado sobre os contentores em execução.
- API etcd: com esta API, são enviados dados para o daemon do Fleet (CoreOS Fleet Daemon).
- systemd-journal-gatewayd.services: com esta diretiva, o Panamax solicita informações sobre serviços ativos (saída do Journal).
Para além destas, a API do Panamax também permite a interação com APIs externas:
- API do Docker Registry: através desta API, o Panamax extrai as etiquetas de imagem do Panamax do registo do Docker (Docker Registry).
- API do GitHub: com ela, é possível carregar modelos do Panamax para repositórios do GitHub.
- API KissMetrics: a API da KissMetrics recolhe dados sobre os modelos executados pelos utilizadores.
- Interface de utilizador do Panamax: a interface de utilizador do Panamax permite aos utilizadores controlar a ferramenta Docker no sistema local através de uma interface gráfica. Com a API do Panamax, os dados introduzidos pelo utilizador podem ser enviados diretamente para o agente local. A interface de utilizador do Panamax baseia-se no CTL Base UI Kit, uma biblioteca básica com componentes de interface de utilizador para projetos da CenturyLink.
Os nós sem tarefas de administração num cluster Docker são designados, na terminologia do Docker, por «Remote Deployment Targets». Estes são constituídos por um host Docker configurado com os seguintes componentes para a implementação de modelos Panamax:
- Instalador do Alvo de Implementação: o instalador inicia um host Docker, que inclui um agente remoto Panamax e um adaptador de orquestração (Orchestration Adapter).
- Agente Remoto Panamax: uma vez instalado o agente remoto do Panamax, as aplicações podem ser distribuídas no cluster através do cliente local do Panamax. Este agente remoto é executado como um contentor Docker em cada alvo de implementação (Deployment Target) no cluster.
- Adaptador de orquestração do Panamax: no adaptador de orquestração, a lógica de programa de cada uma das ferramentas de orquestração disponíveis para o Panamax é implementada numa camada independente do adaptador. É assim que os utilizadores têm a possibilidade de escolher sempre a tecnologia de orquestração exatamente compatível com cada ambiente final. Os adaptadores predefinidos incluem o Kubernetes e o Fleet:
- Panamax Kubernetes Adapter: em combinação com o agente remoto do Panamax, o adaptador Kubernetes permite distribuir modelos do Panamax em clusters Kubernetes.
- Adaptador Panamax Fleet: em cooperação com o agente remoto do Panamax, o adaptador Fleet permite distribuir modelos do Panamax em clusters controlados pelo gestor de clusters Fleet.
O gráfico a seguir mostra a interação de cada componente do Panamax num cluster Docker:

O Panamax oferece aos utilizadores várias tecnologias padrão de orquestração de contentores numa interface gráfica, bem como a possibilidade de gerir aplicações com vários contentores de grande complexidade em arquiteturas de cluster em qualquer sistema, como, por exemplo, um computador portátil.
Com o repositório público de modelos, a Panamax disponibiliza aos utilizadores no GitHub uma biblioteca gratuita de modelos com diversos recursos.
Drone
O Drone é uma plataforma de integração contínua leve e pouco exigente. Com esta ferramenta Docker, pode carregar automaticamente a versão mais recente a partir de um repositório Git, como o GitHub, e executá-la em contentores Docker isolados para realizar testes. O utilizador tem a possibilidade de executar qualquer conjunto de testes e programar o envio de relatórios e notificações de estado para o seu e-mail. Para cada teste de software, é gerado um novo contentor baseado numa imagem do repositório público do Docker, de modo que qualquer imagem do Docker disponível publicamente pode ser utilizada como ambiente para o código que se pretende testar.
O Drone está integrado no Docker e suporta várias linguagens de programação, como PHP, Node.js, Ruby, Go ou Python. A única dependência necessária é, precisamente, a plataforma de contentores. Isto significa que, para criar uma plataforma de integração contínua com o Drone, é necessário fazê-lo num sistema no qual o Docker esteja instalado. O Drone suporta vários repositórios de controlo de versões. Na documentação do projeto encontra-se um manual com o nome readme.drone.io para a instalação padrão com integração do GitHub.
Para gerir a plataforma de CI, utiliza-se uma interface web através da qual se carregam as compilações de software a partir de qualquer repositório Git, se agrupam as aplicações e se executa o resultado num ambiente de testes previamente definido. Para tal, para cada teste é definido um ficheiro .drone.yml no qual se especifica como a aplicação deve ser criada e executada.
Com o Drone, os utilizadores têm à sua disposição uma solução de CI de código aberto que combina as vantagens de produtos alternativos, como o Travis e o Jenkins, numa aplicação simples e intuitiva.
OpenStack
Quando se trata de construir e gerir infraestruturas na nuvem baseadas em código aberto, o sistema operativo na nuvem OpenStack é a solução de software ideal. O OpenStack permite gerir os recursos de computação, memória e rede de um centro de dados a partir de um painel de controlo central e disponibilizá-los aos utilizadores através de uma interface web.
Este sistema operativo baseia-se numa arquitetura modular composta por vários elementos:
- Zun (Serviço de contentores): O Zun é o serviço de contentores do OpenStack que permite implementar e gerir facilmente aplicações em contentores na nuvem OpenStack. O objetivo do Zun é permitir que os utilizadores gerem contentores através de uma API REST sem necessidade de gerir servidores ou clusters. O Zun necessita de outros três serviços OpenStack para funcionar: Keystone, Neutron e kuryr-libnetwork. Opcionalmente, é possível ampliar a funcionalidade do Zun com outros serviços do OpenStack, como o Cinder e o Glance.
- Neutron (componentes de rede): O Neutron (anteriormente Quantum) é um componente do sistema baseado numa API portátil e escalável que se ocupa do controlo da rede. Este módulo fornece uma interface para topologias de rede complexas e suporta diversas extensões que permitem integrar funções de rede avançadas.
- kuryr-libnetwork (controlador no Docker): o kuryr-libnetwork é um controlador do Docker que atua como interface entre o Docker e o Neutron.
- Keystone (serviço de identificação): com o Keystone, os utilizadores do OpenStack dispõem de um serviço central de identidade que funciona como sistema de autenticação e gestão de direitos entre cada um dos componentes do OpenStack. Qualquer acesso a projetos na nuvem é regulado através dos chamados tenants (mandantes), cada um dos quais representa uma unidade de utilizador. Para cada unidade de utilizador, podem ser definidos vários acessos com direitos diferenciados.
- Cinder (sistema de armazenamento em blocos): este é o nome dado a um componente da arquitetura OpenStack que fornece memórias em blocos para o funcionamento de máquinas virtuais. Este módulo fornece memórias virtuais através de uma API Self Service. Com ela, os utilizadores podem solicitar recursos de memória sem poderem ver em que dispositivo essa memória é instalada.
- Glance: com este serviço, o OpenStack permite armazenar e recuperar imagens de máquinas virtuais.
Para mais informações sobre os componentes e serviços do OpenStack, consulte o nosso artigo sobre o OpenStack. Além dos componentes listados, a arquitetura do OpenStack pode ser ampliada com vários módulos opcionais. Pode encontrar mais informações no site do OpenStack.
D2iQ DC/OS
O DC/OS (Distributed Cloud Operating System) é um software de código aberto desenvolvido pela D2iQ (anteriormente Mesosphere) para a gestão de sistemas distribuídos. O projeto tem como base o gestor de clusters de código aberto Apache Mesos e foi concebido como um sistema operativo para centros de dados. O código-fonte do DC/OS está disponível no GitHub sob uma licença Apache Versão 2 e, em d2iq.com, os seus desenvolvedores comercializam uma versão Enterprise do software. Em dcos.io, pode consultar-se a documentação detalhada do projeto.
O DC/OS pode ser considerado uma espécie de distribuição do Mesos que, através de uma interface central, disponibiliza ao utilizador todas as funcionalidades do gestor de clusters e as amplia consideravelmente.
O DC/OS utiliza o kernel distribuído do Mesos. Isto permite agrupar os recursos de todo um centro de dados e geri-los como um único servidor lógico, sob a forma de um sistema agregado. É assim que se podem coordenar conjuntos inteiros de máquinas físicas ou virtuais com a mesma facilidade com que se utiliza um único computador.
O software simplifica a instalação e a gestão de aplicações distribuídas e automatiza a gestão de recursos, a distribuição de tarefas e a comunicação entre processos, entre outras funções. Tanto os clusters baseados no D2iQ DC/OS como todos os serviços executados neles são geridos de forma centralizada através de uma interface de linha de comandos (CLI) ou de uma interface web (GUI).
O DC/OS abstrai os recursos do cluster e fornece serviços comuns, como a descoberta de serviços ou a gestão de pacotes. Os componentes centrais do software são executados num espaço protegido, o espaço do Kernel, ao qual pertencem os programas mestre e agente da plataforma Mesos, responsáveis pela classificação de recursos, pelo isolamento de processos e pelas funções de segurança.
- Mesos Master: trata-se de um processo mestre que é executado num nó mestre de um cluster e é responsável pela gestão de recursos e pela coordenação de tarefas (unidades de trabalho abstratas) executadas num nó agente. Para tal, o Mesos Master distribui os recursos entre os serviços DC/OS e recebe os relatórios de recursos dos agentes Mesos.
- Agentes Mesos: os agentes Mesos são processos escravos que são executados em nós de agente e são responsáveis pela execução das tarefas distribuídas pelo mestre. Estes agentes enviam periodicamente ao mestre relatórios sobre os recursos disponíveis no cluster, que o mestre envia a um planeador ou scheduler (Marathon, Chronos ou Cassandra). Este decide qual a tarefa que será executada em cada nó. As tarefas são isoladas e executadas num contentor.
Os restantes componentes do sistema, bem como as aplicações executadas pelos agentes Mesos através do executor, funcionam no Espaço do Utilizador. Entre os componentes básicos de uma instalação padrão do DC/OS contam-se o Admin Router, o DNS do Mesos, um proxy DNS distribuído, o balanceador de carga Minuteman, o agendador Marathon, o Apache ZooKeeper e o Exhibitor. Apresentamos-os em pormenor a seguir:
- Admin Router: trata-se de um servidor web baseado em NGINX e configurado de forma específica, que fornece tanto serviços DC/OS como funções centrais de verificação e proxy.
- Mesos DNS: este componente inclui funcionalidades de Service Discovery que permitem que todos os serviços e aplicações no cluster se identifiquem mutuamente através de um Domain Name System (DNS) central.
- Proxy DNS Distribuído: trata-se de um distribuidor (dispatcher) DNS interno.
- Minuteman: este componente atua como um balanceador de carga interno que opera na camada de transporte (camada 4) do modelo de referência OSI.
- DC/OS Marathon: este é um componente central da plataforma Mesos com funções de init-System (semelhante ao systemd) no D2iQ DC/OS. O Marathon inicia e supervisiona serviços DC/OS e aplicações em ambientes de cluster, oferecendo, além disso, funções de alta disponibilidade, Service Discovery, balanceamento de carga, verificações de integridade e uma interface web gráfica.
- Exhibitor: graças a este componente, o Zookeeper pode ser instalado e configurado automaticamente em cada nó mestre de um cluster. O Exhibitor inclui ainda uma interface gráfica de utilizador para os utilizadores do Zookeeper.
Nos recursos do cluster agregados com o DC/OS, é possível executar várias tarefas em simultâneo, de modo que o sistema operativo do cluster permite, por exemplo, o funcionamento em paralelo de sistemas de Big Data, microsserviços ou plataformas de contentores como o Hadoop, o Spark e o Docker.
O D2iQ Universe disponibiliza um catálogo público de aplicações para o DC/OS, através do qual é possível instalar aplicações como o Spark, o Cassandra, o Chronos, o Jenkins ou o Kafka com grande facilidade através da interface de utilizador.
Ferramentas do Docker para a segurança
Embora os processos isolados em contentores sejam executados no mesmo kernel, o Docker utiliza uma série de técnicas de isolamento para os proteger uns dos outros. Em particular, são utilizadas funcionalidades centrais do kernel do Linux, como Cgroups e Namespaces. Por isso, os contentores não oferecem o mesmo nível de isolamento que o que se consegue com máquinas virtuais.
Apesar das técnicas de isolamento descritas, a partir dos contentores é possível aceder a importantes sistemas secundários do kernel, como os Cgroups ou as interfaces do kernel nos diretórios /sys e /proc.
A equipa de desenvolvimento por trás do Docker também está ciente destes problemas de segurança, considerando-os um obstáculo à consolidação desta tecnologia em sistemas de produção. A par das técnicas fundamentais de isolamento do kernel do Linux, as versões mais recentes do Docker Engine suportam, consequentemente, as estruturas AppArmor, SELinux e Seccomp, que funcionariam como uma espécie de firewall para os recursos do kernel:
- AppArmor: permite controlar os direitos de acesso dos contentores ao sistema de ficheiros.
- SELinux: apresenta um sistema complexo de regras com o qual é possível implementar controlos de acesso aos recursos do kernel.
- Seccomp: (Secure Computing Mode) supervisiona as chamadas de system calls.
Para além destas ferramentas do Docker, o Docker também utiliza as chamadas «capabilities» do Linux, que permitem limitar os direitos de root com que o Docker Engine inicia os contentores.
Algumas vulnerabilidades de software presentes em componentes das aplicações que se propagam através do registo do Docker também são motivo de preocupação. Em princípio, não há restrições quanto à criação e publicação de imagens no Docker Hub, e é isso que acarreta o risco de introduzir código malicioso num sistema através do download de uma imagem. Por isso, antes da implementação de uma aplicação, os utilizadores do Docker devem sempre certificar-se de que o código completo fornecido por uma imagem para executar contentores provém de uma fonte fiável.
A Docker oferece um programa de certificação que permite avaliar e certificar fornecedores de infraestruturas, contentores e extensões. Com este programa de certificação, a Docker pretende facilitar aos programadores a criação de cadeias de abastecimento de software seguras para os seus projetos.
Para além de aumentar a segurança dos utilizadores, os certificados do Docker pretendem oferecer aos programadores a possibilidade de destacar os seus projetos entre os inúmeros recursos disponíveis. Entre outros aspetos, as imagens certificadas obtêm melhores classificações nos resultados de pesquisa do Docker Hub e são identificadas com o selo*«Verified Publisher*».