Docker + Django

10,273 views

Published on

Slides do evento https://plus.google.com/events/c0ulqmr27796bh8vbsv7bl71698

Published in: Technology

Docker + Django

  1. 1. Docker + Django Allisson Azevedo
  2. 2. Allisson Azevedo • Desenvolvedor Web na SodaVirtual • http://github.com/allisson • http://youtube.com/allissonazevedo • http://slideshare.net/allisson • http://speakerdeck.com/allisson
  3. 3. O Problema • Preciso rodar meu webapp • Preciso de um ambiente pré configurado • Minha equipe também
  4. 4. Solução #1 • Arquivo README no repositório • Dependências para instalar no SO • Alguns possíveis “truques” para o webapp funcionar
  5. 5. Problemas #1 • Diferentes SO • Diferentes versões do mesmo SO • Obriga toda a equipe a ser “especialista” em infra • Tempo
  6. 6. Solução #2 • Virtualização • Vagrant • Vagrantfile no repo do projeto • vagrant up
  7. 7. Problemas #2 • Vagrant é legal, mas… • Não serve para produção • • • Alto custo de hardware Uma vm para cada aplicativo :( É necessário um SO completo para rodar sua aplicação?
  8. 8. Linux Containers (LXC) • Permite rodar um Linux dentro de outro Linux • Chroot on steroids • Dentro do container, parece uma VM • Fora do container, é mais um processo do SO
  9. 9. Porque usar Containers? • Velocidade • • Boot em questão de segundos Economia de recursos • Os processos rodando dentro de um container são vistos como um processo no sistema Host
  10. 10. LXC no Ubuntu 12.04 • https://help.ubuntu.com/12.04/serverguide/lxc.html
  11. 11. LXC - Quem usa? • Heroku • dotCloud / Docker INC
  12. 12. Docker • Docker is an open-source project to easily create lightweight, portable, self-sufficient containers from any application. The same container that a developer builds and tests on a laptop can run at scale, in production, on VMs, bare metal, OpenStack clusters, public clouds and more. • Tem como base o LXC
  13. 13. Docker - Filesystem • Para rodar um Linux, geralmente precisamos: • bootfs - Boot filesystem • • bootloader e kernel rootfs - Root filesystem • restante dos arquivos do sistema
  14. 14. Docker - Filesystem
  15. 15. Docker - Filesystem
  16. 16. Docker - Layers • Em um boot tradicional do Linux: • • O kernel monta o rootfs como read-only, checa sua integridade e faz montagem como read-write No docker funciona assim: • O kernel monta o rootfs como read-only, depois outro filesystem é montado como read-write em cima do rootfs • Union File System
  17. 17. Docker - Layers
  18. 18. Docker - Images • No docker, image é um layer read-only • Herança de images • Base image: quando não tem pai
  19. 19. Docker - Container • É um layer read-write, montado a partir de um image (e seus parentes) • Configuração de rede e limite de recursos
  20. 20. Docker - Container
  21. 21. Docker - Instalação • Por enquanto, só funciona no Linux • Você pode usar em qualquer sistema, via vagrant • git clone https://github.com/dotcloud/docker.git • cd docker • vagrant up
  22. 22. Demo
  23. 23. Docker + Django • Vamos usar algumas ferramentas já utilizadas no Heroku • https://devcenter.heroku.com/articles/getting-startedwith-django • dj-database-url • dj-static ou o static3 com um middleware wsgi • honcho (clone do foreman em python)
  24. 24. Docker + Django • git clone https://github.com/allisson/django-dockerexample • Dockerfile • sudo docker build -t allisson/myblog . • sudo docker run -d allisson/myblog • sudo docker run -d -e DATABASE_URL=postgres:// user:pass@ip:5432/banco allisson/myblog
  25. 25. Docker - Boas práticas • Use repositórios privados quando necessário • https://docs.docker.io/en/latest/use/ workingwithrepository/#private-repositories • Evitar em produção, containers do tipo: nginx + mysql + memcached + gunicorn • Em produção, o container deve rodar apenas o processo da aplicação • configurações via variáveis de ambiente
  26. 26. Links • http://blog.docker.io • https://github.com/progrium/dokku • http://deis.io • https://github.com/shipyard/shipyard
  27. 27. Obrigado!

×