O documento introduz o Docker, explicando como ele permite entregar software de forma fácil e consistente através de contêineres leves que isolam as aplicações e serviços. O Docker facilita a criação de ambientes idênticos entre desenvolvimento e produção e permite escalar aplicações com agilidade e controle.
2. Introdução ao Docker
Como entregar software sem dor ?
Como garantir que o software que roda em desenvolvimento vai rodar
em produção?
Como criar um ambiente em desenvolvimento que tenha a
infraestrutura de produção sem ”duplicar” a estrutura e dobrar os
custos?
Como garantir que as várias camadas e peças de software funcionem
bem?
Como não colocar ”todos os ovos” em uma só cesta ?
3. Introdução ao Docker
O Docker funciona como um ”Contêiner” de software, capaz de
encapsular tudo que o software precisa para rodar
Roda no Kernel existente
Isola o ambiente do contêiner do ambiente do Host
Possibilita criar uma arquitetura de micro-serviços
Muito fácil de criar contêineres
Os contêineres são executados de forma rápida e podem ser parados e
reiniciados e trocados em segundos
5. Introdução ao Docker
Overhead de processamento é quase inexistente
Overhead de rede é mínimo
Contêineres são muito leves
Um laptop típico pode rodar 10-100 contêineres facilmente
Um servidor típico pode rodar de 100-1000 contêineres
O que roda local, irá rodar no servidor com o mesmo comportamento,
independente da versão, da distribuição e das dependências de
software
7. Introdução ao Docker
Um contêiner tem seu próprio espaço de processo (namespaces)
Um contêiner tem sua própria rede interna
Um contêiner pode rodar programas como ”root” sem problemas
Pode ter seu próprio /sbin /etc /etc/init sem afetar o host
Seu sistema de arquivos é incremental ”por camadas”. Isso permite
um rollback fácil.
Docker CPU performance = performance nativa
Docker Memória = % pequeno diferente da memória do Host
Docker Rede = % pequeno de overhead
11. Docker não é uma VM
Docker NÃO é uma VM leve
Docker aproveita o KERNEL do Host
Docker não precisa de SO Convidado
Docker isola o processo do Host
Docker permite que você execute um ambiente diferente do ambiente
do Host
Docker permite que você tenha uma biblioteca com dependências e
versões diferentes do Host
Docker pode rodar em uma VM
Docker pode rodar até em um Contêiner
14. O que cabe no contêiner?
Seu código fonte todo
Seus binários
Suas bibliotecas
Seu gerenciador de pacotes favorito (APT-GET, RPM, YUM, YAST, etc)
Seus aplicativos
Seus serviços de SGBD (Mysql, Oracle, Mongo, PostgreSQL, etc
Seus dados
15. E fora do contêiner, fica o que?
Logging
Acesso remoto
Configuração de rede
Monitoramento
16. E meus dados?
Volumes permitem que um diretório específico exista dentro e fora do
contêiner
Os contêineres podem compartilhar volumes em um mesmo Host
Um diretório pode persistir mesmo que um contêiner seja deletado
Volumes com dados podem ser criados em um Dockerfile ou CLI
Uma alteração no sistema de arquivos de um contêiner pode ser
copiada para demais contêineres
18. Tá, mas qual a grande sacada?
Sim, você pode fazer tudo com VMs.
Sim, você pode automatizar com scripts
Mas a graaaaaaande questão é fazer tudo r-i-d-i-c-u-l-a-m-e-n-t-e
fácil de usar
Você pode utilizar as imagens de outras pessoas (SIM, o Ecossistema)
Continua entrega / integração / teste / orquestração de software
Você pode criar e compartilhar imagens (todos da equipe rodam a
mesma coisa)
Provê uma maneira simples, PADRÃO e que pode ser REPRODUZIDA
com facilidade de entregar imagens
19. Configuração Simples
Sim, funciona no LINUX
Sim, funciona no MAC
Sim, funciona no Windows
Sim, funciona em VMs
Altamente escalável
Instalação simples através de git
Provisionamento simples na AWS, Rackspace, Digital Ocean e Azure
20. Componentes do Docker
Docker Daemon = roda em background, gerencia os contêineres e
imagens. Funciona através de uma API HTTP
Docker Contêiner = Unidade padrão que os aplicativos e serviços residem
e são executados
Docker Imagem = A base de um contêiner.
Docker CLI = cliente que conversa com a API HTTP para processar as
requisições
Docker Engine = Cria, entrega e roda os contêineres
Docker Registry = Repositório publico ou privado de imagens
Demais ferramentas de orquestração = ajudam na entrega e
monitoramento de contêineres
21. Fluxo de Trabalho do Docker
Você trabalha com todos os componentes que precisa no
desenvolvimento
Todos da equipe de desenvolvimento fazer código com o mesmo
ambiente (compartilham as imagens)
Outros serviços necessários do código (RADIS, MEMCACHE, Banco)
também rodam nos contêineres. Você testa como deve ser no servidor
Os contêineres podem ser criados em segundos e rodam
instantaneamente
22. Satisfeito com o resultado?
Se você ficar satisfeito com o resultado, pode enviar sua imagem para
um repositório;
Pode rodar automaticamente o contêiner em CI/CD
Pode rodar em produção
Permite crescimento fácil com mais contêineres e Loadbalance
FELICIDADE!!!
E se algo der errado? Volte ao contêiner anterior sem dor!