O documento introduz o Docker, que automatiza a implementação de aplicações em containers leves e portáteis que podem rodar em diferentes ambientes. Ele discute como Docker resolve problemas com movimentação de ambientes de desenvolvimento para produção, manutenção de software e automação de testes de forma mais simples do que Virtual Machines (VMs) ou fazendo manualmente. Docker empacota aplicações e dependências em containers mais leves do que VMs, compartilhando recursos do sistema operacional.
2. O que é o Docker
Uma abstração opensource que automatiza
a implementação de qualquer aplicação de
forma leve e portátil em containers auto-
suficientes, onde poderão ser executados
nos mais diversos ambientes.
4. Principais Problemas
● Mover do ambiente de desenvolvimento para produção é difícil
○ Bibliotecas conflitantes / Diferentes versões
○ Diferentes sistemas operacionais
○ Diferentes versões de banco de dados
● Criar, atualizar e manter toda a software stack é difícil
○ O projeto usualmente contém muitas libs, bancos de dados, serviços…
○ Difícil de manter uma versão do projeto reproduzível
● Teste / Integração Contínua / Entrega Contínua é difîcil de automatizar
5. Como resolver isso (DIY)
Faça você mesmo (Do-It-Yourself)
1. Copiar / Instalar depedencias (manualmente)
2. Preparar os banco de dados
3. Instalar a última versão do projeto
4. Configurar as propriedades
5. Testar o projeto em execução
6. Epaa! Alguma coisa esta faltando, não esta funcionando!
7. Consertar os erros
8. Repetir os testes da aplicação novamente até estar funcionando
9. Escrever manuais para ajudar outras pessoas a configurar o (monstrinho).
6. Como resolver isso (VMs)
Empacotar tudo em uma VM e execute o deploy em
diferentes ambientes
7. Desvantages das VMs
● Pesada. Quantas VMs você pode rodar em sua maquina?
● Consumo alto de recursos. Virtualização completa OS, I/O, etc…
● Tamanho. Usualmente precisa de muitos GBs para cada VM
● Problemas de portabilidade. Diferentes soluções de virtualização.
● Gerenciamento. Difícil de manter / configurar / reusar diferentes versões de
cada VM.
● Problemas de gerenciamento podem ser resolvidos com Vagrant, Chef,
Puppet…
9. Virtual Machines
Cada aplicação virtualizada não inclui somente a aplicação - onde pode
ser somente 10MB de arquivo - e as libs e binários necessários, mas
também todo um sistema operacional - onde pode ter mais de 10 GB.
Docker vs Virtual Machines
Docker
A Docker Engine Container compreende apenas a aplicação e suas
dependencias. Ela roda em um processo isolado em um userspace no
sistema operacional hospedeiro, compartilhando o kernel com os outros
containers. Dessa forma é possível ter o isolamento e alocamento de
recurso que uma vm proporciona porém mais portatíl e eficiente.