Share
Embed
Docker para Maiores - Superlógica
Matheus Fidelis
June 17, 2018
Transcript
48 slides
-
$WHOAMI Matheus Fidelis Desenvolvedor & DevOps Twitter: @fidelissauro Superlogica /
PJBank Email: [email protected] Blog: http://nanoshots.com.br 2 -
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 -
” “Nada se cria, tudo se copia, e sempre de
um jeito novo” - Lars Herrmann 8 -
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 -
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! -
CI & CD CONTINUOUS INTEGRATION AND CONTINUOUS DELIVERY FAST SCALING
INFRAESTRUTURA ÁGIL 16 -
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 -
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 -
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 -
DOCKER BUILD 29 # docker build . -t seunome/nomedaimagem:versao #
docker build . -t superlogica/aulaapache:latest # docker images -
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. -
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 -
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 :) -
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 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 -
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) -
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