DOCKER PARA
MAIORES
Matheus Fidelis - @fidelissauro
$WHOAMI
Matheus Fidelis
Desenvolvedor Web PHP & DevOps
Twitter: @fidelissauro
Superlogica - Plataforma
Email: msfidelis01@gmail.com
Blog: http://nanoshots.com.br
2
CRONOGRAMA DE
BORDO3
Docker via Cli
Dockerfiles
Docker
Compose
O QUE É DOCKER?
4
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
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
CONTAINER X VM?7
”
“Nada se cria, tudo se copia, e
sempre de um jeito novo”
▹Lars Herrmann
8
POR QUE DOCKER?
9
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
11
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!
QUALQUER NUVEM13
USE QUALQUER COISA14
ONDE QUEREMOS
CHEGAR COM
DOCKER?
15
CI & CD
CONTINUOUS INTEGRATION AND CONTINUOUS DELIVERY
FAST SCALING
INFRAESTRUTURA ÁGIL
16
ALGUNS CASES NA SUPERLOGICA
(Até o momento)
17
Graylog
▹Parsing de Logs do Cloud
▹Trata uma média de 4 GB
de Logs diários pra
plataforma
▹Usamos MongoDB,
Elastic Search e Java.
18
Hosting API
▹API de Hospedagem do novo
recurso de Sites Institucionais da
Superlogica
▹PHP 7 FPM, Bash Script, Apache,
MySQL e Varnish
19
Cloud Cache API
▹API de Cacheamento de
requisições do Cloud para os RDS
da AWS.
▹PHP 7, Memcache, Modularização
Dev/Prod, Silex
▹NGINX e Load Balance.
▹Alta concorrência.
20
1
A estrada até aqui...
DOCKER ON CLI
(VULGO ORQUESTRAÇÃO
V1D4 L0K4)
22
UM É POUCO, DOIS É BOM
E TRÊS É DEMAIS
23
SUBINDO UMA NA MÃO24
matheus@fidelis~$ docker run -it ubuntu:latest /bin/bash
root@123129380 apt-get update; apt-get install php7.0
apache2
(CTRL + D)
matheus@fidelis~$ docker ps
matheus@fidelis~$ docker commit 123129380
msfidelis/apache
ORQUESTRAÇÃO BÁSICA
(UMA PALAVRINHA SOBRE RECEITAS DE BOLO)
25
DOCKERFILE
(A RECEITA DO BOLO, VULGO
CONTAINER)
26
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.
27
ESTRUTURA DE UMA DOCKERFILE
28
DOCKER BUILD
29
# docker build . -t seunome/nomedaimagem:versao
# docker build . -t superlogica/aulaapache:latest
# docker images
BUILD DE UMA DOCKERFILE
30
BUILD DE UMA DOCKERFILE
31
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.
32
AINDA NÃO TA LEGAL…
MUITO LONGE DO CI/CD
33
Ainda existe muito processo manual pra construir e
subir containers. Não nos livramos da orquestração
Vid4 L0k4.
DIGA NÃO AO GO-HORSE
(Piadinha infame)
34
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
35
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
36
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).
37
ORQUESTRAÇÃO DE GENTE GRANDE
(UMA SINFONIA ENTRE SISTEMAS)
38
DOCKER COMPOSE39
▹ 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 :)
40
DOCKER-COMPOSE.YML
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.
41
DICAS SOBRE
ORQUESTRAÇÃO
42
Vulgo coisas que eu gostaria que alguém tivesse me
dito sobre o Docker...
DICAS MAROTAS43
▹ 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
DICAS MAROTAS44
▹ 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)
DOCKER
É 90%
MINDSET
E 10%
TECNICA
45
E NO PRÓXIMO CAPÍTULO...
46
47 E NO PRÓXIMO CAPÍTULO
▹ Introdução ao Google Kubernetes
▹ Instrodução ao Docker Swarm
▹ Construir e Escalar uma API REST completa usando PHP
7 + NGINX + SILEX + MEMCACHE + MySQL + MongoDB
▹ Montar um ambiente completo de Teste, CI & CD, Build e
Deploy com integrações do Docker como Jenkins e GIT
48
OBRIGADO!
https://github.com/msfidelis/DockerParaMaioresSuperlogica/

Docker para maiores

  • 1.
  • 2.
    $WHOAMI Matheus Fidelis Desenvolvedor WebPHP & DevOps Twitter: @fidelissauro Superlogica - Plataforma Email: msfidelis01@gmail.com Blog: http://nanoshots.com.br 2
  • 3.
    CRONOGRAMA DE BORDO3 Docker viaCli Dockerfiles Docker Compose
  • 4.
    O QUE ÉDOCKER? 4
  • 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.
  • 8.
    ” “Nada se cria,tudo se copia, e sempre de um jeito novo” ▹Lars Herrmann 8
  • 9.
  • 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
  • 11.
  • 12.
    POR QUE DOCKER? 12 ▹ Independede Linguagem ▹ Independe de Framework ▹ Independe de S.O. ▹ Conflitos de versão? Puff… ▹ Adapte para o que quiser ▹ O mundo é seu!
  • 13.
  • 14.
  • 15.
  • 16.
    CI & CD CONTINUOUSINTEGRATION AND CONTINUOUS DELIVERY FAST SCALING INFRAESTRUTURA ÁGIL 16
  • 17.
    ALGUNS CASES NASUPERLOGICA (Até o momento) 17
  • 18.
    Graylog ▹Parsing de Logsdo Cloud ▹Trata uma média de 4 GB de Logs diários pra plataforma ▹Usamos MongoDB, Elastic Search e Java. 18
  • 19.
    Hosting API ▹API deHospedagem do novo recurso de Sites Institucionais da Superlogica ▹PHP 7 FPM, Bash Script, Apache, MySQL e Varnish 19
  • 20.
    Cloud Cache API ▹APIde Cacheamento de requisições do Cloud para os RDS da AWS. ▹PHP 7, Memcache, Modularização Dev/Prod, Silex ▹NGINX e Load Balance. ▹Alta concorrência. 20
  • 21.
  • 22.
    DOCKER ON CLI (VULGOORQUESTRAÇÃO V1D4 L0K4) 22
  • 23.
    UM É POUCO,DOIS É BOM E TRÊS É DEMAIS 23
  • 24.
    SUBINDO UMA NAMÃO24 matheus@fidelis~$ docker run -it ubuntu:latest /bin/bash root@123129380 apt-get update; apt-get install php7.0 apache2 (CTRL + D) matheus@fidelis~$ docker ps matheus@fidelis~$ docker commit 123129380 msfidelis/apache
  • 25.
    ORQUESTRAÇÃO BÁSICA (UMA PALAVRINHASOBRE RECEITAS DE BOLO) 25
  • 26.
    DOCKERFILE (A RECEITA DOBOLO, VULGO CONTAINER) 26
  • 27.
    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. 27
  • 28.
    ESTRUTURA DE UMADOCKERFILE 28
  • 29.
    DOCKER BUILD 29 # dockerbuild . -t seunome/nomedaimagem:versao # docker build . -t superlogica/aulaapache:latest # docker images
  • 30.
    BUILD DE UMADOCKERFILE 30
  • 31.
    BUILD DE UMADOCKERFILE 31
  • 32.
    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. 32
  • 33.
    AINDA NÃO TALEGAL… MUITO LONGE DO CI/CD 33 Ainda existe muito processo manual pra construir e subir containers. Não nos livramos da orquestração Vid4 L0k4.
  • 34.
    DIGA NÃO AOGO-HORSE (Piadinha infame) 34
  • 35.
    VOLTAMOS AO MARDE 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 35
  • 36.
    VOLTAMOS AO MARDE 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 36
  • 37.
    VOLTAMOS AO MARDE 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). 37
  • 38.
    ORQUESTRAÇÃO DE GENTEGRANDE (UMA SINFONIA ENTRE SISTEMAS) 38
  • 39.
    DOCKER COMPOSE39 ▹ Veiodo 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 :)
  • 40.
  • 41.
    COMANDOS DO DOCKER- COMPOSE... BUILD Buildao 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. 41
  • 42.
    DICAS SOBRE ORQUESTRAÇÃO 42 Vulgo coisasque eu gostaria que alguém tivesse me dito sobre o Docker...
  • 43.
    DICAS MAROTAS43 ▹ AlpineLinux - 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
  • 44.
    DICAS MAROTAS44 ▹ 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)
  • 45.
  • 46.
    E NO PRÓXIMOCAPÍTULO... 46
  • 47.
    47 E NOPRÓXIMO CAPÍTULO ▹ Introdução ao Google Kubernetes ▹ Instrodução ao Docker Swarm ▹ Construir e Escalar uma API REST completa usando PHP 7 + NGINX + SILEX + MEMCACHE + MySQL + MongoDB ▹ Montar um ambiente completo de Teste, CI & CD, Build e Deploy com integrações do Docker como Jenkins e GIT
  • 48.