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

Docker + Django

Docker + Django

13991d197c3eb0f71b802337d5eb2719?s=128

Allisson Azevedo

December 06, 2013
Tweet

Transcript

  1. Docker + Django Allisson Azevedo

  2. Allisson Azevedo • Desenvolvedor Web na SodaVirtual • http://github.com/allisson •

    http://youtube.com/allissonazevedo • http://slideshare.net/allisson • http://speakerdeck.com/allisson
  3. O Problema • Preciso rodar meu webapp • Preciso de

    um ambiente pré configurado • Minha equipe também
  4. Solução #1 • Arquivo README no repositório • Dependências para

    instalar no SO • Alguns possíveis “truques” para o webapp funcionar
  5. Problemas #1 • Diferentes SO • Diferentes versões do mesmo

    SO • Obriga toda a equipe a ser “especialista” em infra • Tempo
  6. Solução #2 • Virtualização • Vagrant • Vagrantfile no repo

    do projeto • vagrant up
  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. 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. 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. LXC no Ubuntu 12.04 • https://help.ubuntu.com/12.04/serverguide/lxc.html

  11. LXC - Quem usa? • Heroku • dotCloud / Docker

    INC
  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. Docker - Filesystem • Para rodar um Linux, geralmente precisamos:

    • bootfs - Boot filesystem • bootloader e kernel • rootfs - Root filesystem • restante dos arquivos do sistema
  14. Docker - Filesystem

  15. Docker - Filesystem

  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. Docker - Layers

  18. Docker - Images • No docker, image é um layer

    read-only • Herança de images • Base image: quando não tem pai
  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. Docker - Container

  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. Demo

  23. Docker + Django • Vamos usar algumas ferramentas já utilizadas

    no Heroku • https://devcenter.heroku.com/articles/getting-started- with-django • dj-database-url • dj-static ou o static3 com um middleware wsgi • honcho (clone do foreman em python)
  24. Docker + Django • git clone https://github.com/allisson/django-docker- example • 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. 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. Links • http://blog.docker.io • https://github.com/progrium/dokku • http://deis.io • https://github.com/shipyard/shipyard

  27. Obrigado!