Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

TDC 2016 Floripa - Workshop docker

555 views

Published on

Workshop introdutório para aprender Docker

Published in: Technology

TDC 2016 Floripa - Workshop docker

  1. 1. Workshop Docker
  2. 2. Quem sou eu Rafael Gomes: ● Soteropolitano ● Apaixonado por compartilhamento ● Consultor na Thoughtworks ● Blog: techfree.com.br ● Twitter/github: @gomex ● Áreas de interesse/foco: ○ Cultura DevOps ○ Cloud ○ Entrega contínua ○ Automação de infraestrutura ○ Teste de infraestrutura ○ Monitoramento
  3. 3. O que estou fazendo de relevante agora Livro: ● Pague quanto quiser, inclusive nada ● Não precisa saber nada de Docker ● Licenciado com Creative Commons http://tinyurl.com/docker-devel
  4. 4. Introdução ao ecossistema Docker
  5. 5. 5 Projeto Open source • 2B+ Download de Imagens • 2000+ Contribudores • 40K+ Estrelas no GitHub • 200K+ App Dockerizadas • 240 Meetups em 70 países • 95K Membros de Meetup Quem somos nos Comunidade Docker Docker Inc Provedor de container como serviço • Plataforma de integração para dev e ops • Suporte técnico comercial Patrocinado do projeto Docker • Principal patrocinador do projeto Docker • Suporta mantenedores do projeto
  6. 6. Ecossistema do Docker Dev Tools Official Repositories Operating Systems Big Data Service Discovery Build / Continuous Integration Configuration Management Consulting &Training Management Storage Clustering & Scheduling Networking Infrastructure & Service Providers Storage Security Monitoring & Logging 6
  7. 7. Básico do Docker Docker Image The basis of a Docker container Docker Container The standard unit in which the application service resides Docker Engine Creates, ships and runs Docker containers deployable on physical or virtual host locally, in a datacenter or cloud service provider Docker Registry On-premises registry for image storing and collaboration
  8. 8. Applications are changing 8 Loosely Coupled Services Many Small Servers ~2000 Today Monolithic Big Servers Slow changing Rapidly updated
  9. 9. O Desafio 9 Virtual machines Server Public Cloud Disaster Recovery Developer Laptop Server Cluster Data Center Static Website Web Front EndBackground Workers User DB Analytics DB Queue API Endpoint Development Test & QA Production Scale Out
  10. 10. • Pacotes com binários e suas dependências • Softwares isolados uns dos outros • Container como formato padrão • Fácil portabilidade entre ambientes (GNU/Linux) • Permite padronização no processo de desenvolvimento Solução: Containers Docker 10 Container
  11. 11. Solução 11 Static Website Web Front End Background Workers User DB Analytics DB Queue API Endpoint
  12. 12. Na visão do desenvolvedor • Build uma vez e rode onde quiser • Um ambiente de execução portável, seguro e limpo para sua aplicação • Não se preocupe com dependências perdidas, pacotes e outros pontos de dores durante implantações futuras. Se rodou uma vez, rodará sempre • Execute cada aplicação isolado em seu container, dessa forma você pode executar várias versões de biblioteca e outras dependências para aplicação sem problemas • Teste automatizado, integração, empacotamento, tudo que você pode fazer com script. • Reduz/elimina preocupações com relação a diferentes plataformas GNU/Linux • Barato e sem penalidade de performance para implantar seus ambientes. Restart instantâneo de todo ambiente na velocidade da iniciação do serviço. Esse é o poder do Docker.
  13. 13. Na visão do sysadmin •Configura uma vez, rode em qualquer lugar • Faça o ciclo de vida completo ser mais eficiente, consistente e replicável • Aumente a qualidade do código produzido pelos desenvolvedores • Elimine inconsistência entre desenvolvimento, teste, produção e ambiente do cliente • Melhoria significativa na velocidade e confiança do continuous deployment (CD) e continuous integration (CI). • Container são mais leves, impactam significativamente em problemas de performance, custo, implantação e portabilidade que normalmente são associados a VMs.
  14. 14. Docker Toolbox Tudo que você precisa dentro de uma caixa • Toolbox inclue: – Kitematic – Docker CLI – Docker Machine – Docker Swarm – Docker Compose 14
  15. 15. Docker Toolbox 15 Vamos instalar!
  16. 16. Containers vs. VMs
  17. 17. Camadas
  18. 18. Imagem e Containers
  19. 19. Arquitetura
  20. 20. Comandos básicos Comando Explicação docker pull <nome da imagem> Baixar imagem docker images Listar as imagens locais docker inspect <id imagem ou container> Inspecionar informações docker run <nome da imagem> Iniciar um container docker ps Listas os containers docker exec <nome do container> <cmd> Executar comandos no container
  21. 21. docker pull
  22. 22. Exercicio Baixe a imagem do python # docker pull python
  23. 23. docker images
  24. 24. Exercicio Verifique se imagem python existe localmente # docker images
  25. 25. docker inspect
  26. 26. Exercicio Verifique qual comando padrão da imagem # docker inspect python Obs: Verifique o valor de "CMD"
  27. 27. docker run <parâmetros> <imagem> <CMD> Parâmetro Explicação -d Execução em background --name Nomear o container -m Limitar o uso de memória RAM -c Balancear o uso de CPU -p Mapeamento de porta -v Mapeamento de volume -i Modo interativo -t Alocar pseudo tty
  28. 28. Exercicio Execute a imagem python em modo interativo e acesse seu shell # docker run -it python
  29. 29. Restrição de memória # docker run -m <memória> <imagem>
  30. 30. Exercicio Execute o container com apenas 300MB de limite # docker run -it -m 300M python
  31. 31. Balanceamento de CPU # docker run -c <peso> <imagem> Valor base 1024
  32. 32. Exercicio Execute o container com metade do peso # docker run -it -c 512 python
  33. 33. Mapeamento de porta # docker run -p portahost:portacontainer <imagem> Docker host Virtualbox Container 8080 80 192.168.99.100:80 Cliente
  34. 34. Exercicio Efetue mapeamento da porta 80 para o container da imagem tutum/apache-php # docker run -it -p 80:80 tutum/apache-php Verifique o ip da sua máquina virtual e acesse a interface web
  35. 35. Mapeamento de volume # docker run -v volhost:volcontainer <imagem> Docker host Virtualbox Container /Users/gomex/app Cliente /Users /app
  36. 36. Exercicio Efetue mapeamento a sua pasta atual com a pasta /root do container python # docker run -it -v $PWD:/root python /bin/bash Crie um arquivo na pasta /root do container, depois saia do container e verifique se esse arquivo está no host
  37. 37. docker volumes <parâmetros> Parâmetro Explicação Create <nome> Cria um volume Inspect <nome> Inspeciona o volume ls Lista os volumes existentes rm Remove o volume
  38. 38. Crie um volume e efetue mapeamento com a pasta /root do container python # docker volume create --name teste # docker run -it -v teste:/root python /bin/bash Crie um arquivo na pasta /root do container, depois saia do container, crie um outro container com o mesmo volume e verifique se o arquivo existe # docker run -it -v teste:/root alpine /bin/sh Exercicio
  39. 39. docker ps <parâmetros> Parâmetro Explicação -a Lista todos os containers, inclusive os desligados -l Lista os ultimos containers, inclusive os desligados -n Lista os últimos N containers, inclusive os desligados -q Lista apenas os ids dos containers
  40. 40. Exercicio Verifique quais containers estão em execução no momento # docker ps
  41. 41. Outros comandos docker Explicação stop <id do container> Desliga o container em execução start <id do container> Inicia o mesmo container que estava finalizado logs -f <id do container> Verifica o saida padrão do container attach <id do container> Conectar ao processo que está executando
  42. 42. Exercicio Vamos testar cada comando # docker run -itd --name testepython python # docker stop testepython # docker start testepython # docker logs -f testepython # docker attach testepython
  43. 43. docker exec <parâmetros> Parâmetro Explicação -i Modo interativo -t Com pseudo tty
  44. 44. Exercicio Vamos iniciar um container em background e enviar comandos # docker run -itd --name testealpine alpine /bin/sh # docker exec -it testealpine ls /etc
  45. 45. Exercicio 1) Crie uma conta na nuvem pública do docker (hub.docker.com) 2) Pesquise online sobre uma imagem que você tenha interesse 3) Leia README da imagem escolhida 4) Baixe a imagem escolhida 5) Execute a imagem escolhida com base nos dados do README Sugestão: https://hub.docker.com/r/berngp/docker-zabbix/ # docker run -d -P --name zabbix berngp/docker-zabbix
  46. 46. Dockerfile
  47. 47. Dockerfile É o documento que contém todos os comandos que o usuário poderia normalmente executar para criar um ambiente. Basicamente é uma descrição de procedimentos para criação do seu ambiente.
  48. 48. Dockerfile Instruções Explicação FROM <imagem> Imagem base MAINTAINER <Autor> Com pseudo tty COPY <SRC> <DST> Copiar arquivo para dentro do container RUN <comando> Executar um determinado comando dentro do container CMD <processo> CMD padrão caso nada seja definido no "docker run" ENV <Variável><Valor> Especificar variável de ambiente para o container USER <usuário> O usuário que será usado para dar os comandos WORKDIR <pasta> Qual pasta de trabalho (cd <pasta>)
  49. 49. Dockerfile O arquivo é analisado do top a base do arquivo, ou seja, se preocupe com a ordem as instruções nesse documento! FROM python:2.7 COPY . /code WORKDIR /code RUN pip install -r requirements.txt CMD python app.py
  50. 50. Fazendo o build # mkdir imagem # cd imagem # vi Dockerfile # docker build -t=<nome da imagem> . Obs: No nome da imagem, lembre-se que a imagem deve conter o nome do seu usuário antes do nome da imagem. Exemplo: gomex/redis (meu usuário é gomex).
  51. 51. # docker login # docker push <nome da imagem> Obs: No nome da imagem, lembre-se que a imagem deve conter o nome do seu usuário antes do nome da imagem. Exemplo: gomex/redis (meu usuário é gomex). Enviando pra nuvem
  52. 52. Exercício 1)Escolha uma imagem para ser estendida 2)Crie um Dockerfile com suas modificações 3)Faça build da imagem 4)Envie para nuvem
  53. 53. Perguntas? gomex@riseup.net @gomex http://tinyurl.com/docker-br (Telegram)

×