Docker é uma ferramenta open source que permite a criação e a manipulação de contêineres, os quais contém aplicações e as suas dependências, fornecendo uma camada de abstração de virtualização a nível de sistema operacional, tornando as operações em uma infraestrutura mais flexíveis e eficientes, aumentando a portabilidade das aplicações e suas bibliotecas em conjunto, reduzindo o tempo de distribuição (deploy) de uma infraestrutura ou de uma aplicação, pois não há necessidade de ajustes de ambiente de execução para o correto funcionamento do serviço, não importando o sistema que está rodando, já que o contêiner contém as bibliotecas e os binários empacotados para rodar as aplicações e o sistema próprio, aproveitando apenas a infraestrutura do kernel do sistema operacional do host.
Configure-o uma vez e replique-o quantas vezes quiser. Uma vez que sua aplicação seja transformada em uma imagem Docker, que nada mais é que um pacote executável que contém tudo que é necessário para rodar aplicações e sistemas, e é a partir dela que o contêiner pode ser iniciado.
Portanto, podemos iniciar um contêiner em qualquer ambiente, bastando ter o serviço do Docker rodando no host e a disponibilidade de uma imagem base para o contêiner.
Em seu lançamento, como código aberto, o Docker utilizava em seu back-end o LXC (Linux Contêineres), que funciona isolando processos do sistema operacional do host, utilizando o mesmo Kernel, fazendo com que a sua sobrecarga seja menor que, por exemplo, uma máquina virtual, que necessita de um hipervisor para seu controle, além de consumir muito mais recursos de hardware e necessitar de um kernel próprio.
A partir da versão 0.9, o LXC foi substituído pela sua própria biblioteca, desenvolvida na linguagem Go, trabalhando agora de maneira independente do LXC, podendo acessar as APIs de contêineres do kernel diretamente, como explicado no artigo do Blog
Docker Hykes, 2014.
O uso de contêineres são, portanto mais leves, se comparados à máquinas virtuais completas, já que não precisam de um ambiente virtual completo, visto que o kernel do host proporciona o gerenciamento de memória e outros recursos de hardware.
Para maiores informações sobre contêineres, confira este artigo da
RedHat.
O Docker facilita a comunicação entre desenvolvedores e administradores de sistemas (sysadmins), possibilitando o planejamento da infraestrutura mais simplificado, construindo arquivos com as definições necessárias e os parâmetros de como a aplicação será disposta nesse ambiente, em qual porta fornecerá seu serviço, e outras necessidades.
A ferramenta também disponibiliza uma
nuvem pública para compartilhamento de ambientes prontos (imagens), sejam eles produtos oficiais, ou da comunidade, que podem ser utilizados para viabilizar customizações para ambientes específicos. Visto que qualquer pessoa pode subir uma imagem customizada, é importante ter atenção
na documentação e nos itens que acompanham as imagens, por questões de segurança.
Para maiores informações sobre o funcionamento do Docker, temos um artigo bem completo que pode ser encontrado no
Medium Kasireddy, 2016.
Instalação do Docker
Como o repositório do Docker atualmente utiliza o protocolo HTTPS, e não vem como padrão no
Debian, tendo que instalar algumas dependências, utilizaremos a instalação via script, que é mais simplificada.
Para este artigo, utilizaremos o sistema operacional Debian. Para outras versões
GNU/Linux, Windows, ou MacOS, ou instalação via repositório, o passo a passo de instalação pode ser encontrado no endereço:
Em um Debian Stretch ou superior, no terminal, com acesso root, execute o comando abaixo:
# curl -fsSL https://get.docker.com -o get-docker.sh
# sh get-docker.sh
Acompanhe os scripts do terminal para analisar os processos e mensagens da instalação. Caso queira utilizar o Docker como um usuário comum (non-root), adicione o usuário ao grupo "docker":
sudo usermod -aG docker usuário
Após finalizar, execute o comando abaixo para testar a instalação:
docker version
Se tudo estiver correto, será exibida a versão que está sendo executada no host.