5. O QUE É DOCKER?
▹ Docker é um empacotador de ambientes.
▹ Te permite criar ambientes complexos inteiros, suprir
de dependências, padronizar máquinas e escalar de
maneira rápida.
▹ Facilita a orquestração de máquinas e simular um
ambiente distribuído.
▹ Queijo está para goiabada assim como Docker está para
Cloud.
5
6. O QUE É DOCKER?
▹ Não inventou a roda…
▹ Gerencia Containers LXC
▹ Produto Open Source criado como uma Engine de
Deploy por uma Startup chamada dotCloud.
▹ Todo mundo quis usar, e curtiu…
6
7. ”
“Nada se cria, tudo se copia, e
sempre de um jeito novo”
▹Lars Herrmann
7
10. POR QUE DOCKER?
▹ Facilidade de Empacotar sistemas inteiros.
▹ Facilidade de criação de Clusters e Servidores
▹ Resolução de dependências.
▹ Build performático
▹ MUITO rápido
▹ Escalável, elástico e “clusterizável”
▹ Feito para Cloud e API’s
▹ Não depende de hardware ou sistema
▹ Replicação quase trivial da produção para a máquina do Dev
10
12. POR QUE
DOCKER?
12
▹ Independe de Linguagem
▹ Independe de Framework
▹ Independe de S.O.
▹ Conflitos de versão? Puff…
▹ Adapte para o que quiser
▹ O mundo é seu!
23. O QUE É UMA DOCKERFILE
▹Dockerfiles são basicamente arquivos de configuração
que vão modelar o Container Linux a sua necessidade.
▹Uma Dockerfile segue um padrão de marcação que o
Docker nativo vai seguir para executar o Build dos
containers.
23
28. OPÇÕES DA DOCKERFILE
▹ ADD - Adiciona qualquer arquivo (compactado) para dentro do container
▹ COPY - Copia qualquer arquivo para dentro do container
▹ RUN - Executa qualquer comando a uma camada e commita no container.
▹ CMD - Executa um comando quando o container é iniciado
▹ ENTRYPOINT - Permite rodar um comando na inicialização com Ciclo de vida.
▹ LABEL - Permite adicionar Metadados ao container.
▹ ENV - Cria variáveis de ambiente dentro do Container.
▹ EXPOSE - Informa quais portas o container irá ouvir.
▹ USER - Informa qual usuário irá executar as tarefas do container. Default: root.
▹ VOLUME - Faz a criação dos pontos de montagem do container.
▹ WORKDIR - Muda o diretório / para o diretório especificado.
28
29. AINDA NÃO TA LEGAL…
MUITO LONGE DO CI/CD
29
Ainda existe muito processo manual pra construir e
subir containers. Não nos livramos da orquestração
Vid4 L0k4.
31. VOLTAMOS AO MAR DE DEPENDÊNCIAS
E AO CLIENT VERBOSO.
▹No mundo real, nosso sistema depende de outras coisas…
▹Quando você precisa subir suas dependências.
▹Seu apache, que depende do seu PHP-FPM, que depende
do seu MySQL e do seu Memcache, que mapeia volumes,
que necessita de configurações específicas,
▹e tudo isso, precisa ser startado em ordem pra funcionar
31
32. VOLTAMOS AO MAR DE DEPENDÊNCIAS
E AO CLIENT VERBOSO.
docker run -t --name mysql mysql:5.7 -v ./data:/var/lib/mysql -p 3306:3306
docker run -t --name apache apache:latest -v ./code:/var/www/html -p 80:80 -v
./confs/apache2.conf:/etc/apache2/apache2.conf -v
./confs/vhost.conf:/etc/apache2/sites-enabled/vhost.conf
docker run -t --name cache memcache:alpine -p 11211:11211
docker run -t --name php php7-fpm:lastest -v ./code:/var/www/html
--link mysql --link apache --link memcache -p 9000:9000
32
33. VOLTAMOS AO MAR DE DEPENDÊNCIAS
E AO CLIENT VERBOSO.
▹ MUITA coisa pra digitar
▹ Voltamos ao Dependency Hell, porém com containers, de fato não
resolvemos o problema.
▹ Muita coisa pra digitar === muita chance de errar.
▹ NÃO, absolutamente você NÃO será inteligente de isolar isso num
arquivo SH. (Espertinho, não seja V1D4 L0K4).
33
35. DOCKER COMPOSE35
▹ Veio do projeto FIG, que devido ao sucesso na comunidade foi
adquirido e integrado ao Docker como Docker-Compose.
▹ Te permite baixar e buildar images, mapear volumes, propriedades,
variáveis de ambiente de TODO o seu sistema a partir de um único
arquivo ‘maestro’.
▹ Feito para aplicações multi-containers
▹ Você pode referenciar seus serviços, Dockerfiles, arquivos de
configuração e como eles vão se comportar durante o build.
▹ Resolução de ordem de dependência
▹ Facilita escalar. Sério.
▹ Torna o chato, legal de novo :)
37. COMANDOS DO DOCKER-
COMPOSE...
BUILD
Builda o conteúdo do arquivo
docker-compose.yml
Para buildar sem cache, usamos --
no-cache
UP
Sobe o conteúdo do arquivo
docker-compose.yml
STOP
Para todos os containers filhos do
docker-compose.yml do projeto
SCALE
Escala a aplicação selecionada
scale api=3
RM & KILL
Remove os containers parados do
projeto. Use o -f para force.
Mata todos os containers do
projeto
LOGS
Mostra os logs do projeto atual.
Toda a saída padrão de execução.
37
39. DICAS MAROTAS39
▹ Alpine Linux - Uma distribuição Linux Minimalista que serve pra
trabalhos braçais e rápidos, como Cache, containers services que
sobem, executam algo e morrem (ex: dump, restore, compose e etc).
▹ Modularização de ambiente Dev & Test e Prod via compose.
Referenciamos um docker-compose alternativo com o -f
Ex: docker-compose -f docker-compose-dev.yml ou -f docker-
compose-prod.yml
40. DICAS MAROTAS40
▹ Você pode containerizar serviços simples, como um Cron, um ‘npm
install’, um ‘composer update’, um restore do banco de dados, um
Webhook, uma chamada Curl e etc.
▹ Usar o HaProxy para construir um Load Balance entre containers.
▹ Ambientes Containerizados funcionam muito bem para comportar e
escalar API’s REST.
▹ Sempre limpe seus containers após um yum ou apt
(Ex: apt-get autoremove; apt-get clean; apt-get autoclean)
42. O DOCKER MAIS ROCK N` ROLL
42
Quando a brincadeira acaba e chega hora de rodar em larga escala.
(Ou quando a orquestração nativa começa a nos limitar)
43. QUANDO CHAMAR REFORÇOS43
▹ Suas Stacks de Compose não escalam mais dentro das suas limitações
de Hardware.
▹ Sua aplicação cresceu tanto que você não tem mais como escalar
manualmente nem depender de balanceadores de carga
convencionais.
▹ Sua aplicação cresceu TANTO que você não consegue mais controlar
onde estão alocados os seus recursos. E isso passa a não importar.
▹ Quando seu deploy precisa de mais consistência e sua nova release
precisa ser replicada em diversos servidores muito rapidamente.
46. DOCKER SWARM46
▹ Criação nativa de Clusters
▹ Possui um master e infinitos Slaves
▹ Permite deploy via Docker-Compose
▹ Rápida integração de novos nodes
▹ Orientado a serviços
▹ Balance e Scaling
▹ Alta disponibilidade
▹ Rápido Failover
▹ Gerenciamento por meio de API
47. APACHE MESOS47
▹ Sistemas distribuidos
▹ Isolamento de Serviços
▹ Uma abstração minimalista do Kernel Linux
▹ API de um Kernel confiável entre nodes
48. KUBERNETES48
▹ Gerenciamento de Clusters
▹ Alta disponibilidade
▹ Gerenciamento Total do Ambiente
▹ Master e vários Slaves replicáveis
▹ Deploy em Larga Escala
▹ Load balance, Auto Scaling
▹ Não depende só de Docker (Rocket)
▹ Ambientes de médio/grande/enorme porte
▹ Muita gente usando em produção
▹ Web UI