Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Docker para Maiores - Superlógica

Docker para Maiores - Superlógica

Matheus Fidelis

June 17, 2018
Tweet

More Decks by Matheus Fidelis

Other Decks in Technology

Transcript

  1. 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
  2. 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
  3. ” “Nada se cria, tudo se copia, e sempre de

    um jeito novo” - Lars Herrmann 8
  4. 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
  5. 11

  6. 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!
  7. 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
  8. Hosting API ▹ API de Hospedagem do novo recurso de

    Sites Institucionais da Superlogica ▹ PHP 7 FPM, Bash Script, Apache, MySQL e Varnish 19
  9. 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
  10. SUBINDO UMA NA MÃO 24 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
  11. 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
  12. DOCKER BUILD 29 # docker build . -t seunome/nomedaimagem:versao #

    docker build . -t superlogica/aulaapache:latest # docker images
  13. 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
  14. 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.
  15. 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
  16. 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
  17. 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
  18. DOCKER COMPOSE 39 ▹ 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 :)
  19. 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
  20. DICAS SOBRE ORQUESTRAÇÃO 42 Vulgo coisas que eu gostaria que

    alguém tivesse me dito sobre o Docker...
  21. DICAS MAROTAS 43 ▹ 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
  22. DICAS MAROTAS 44 ▹ 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)
  23. 47 E NO PRÓXIMO CAPÍTULO ▹ Introdução ao Google Kubernetes

    ▹ Instrodução ao Docker Swarm ▹ Construir e Escalar uma API REST ▹ Montar um ambiente completo de Teste, CI & CD, Build e Deploy com integrações do Docker como Jenkins e GIT