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

Docker + Django

Docker + Django

Allisson Azevedo

December 06, 2013
Tweet

More Decks by Allisson Azevedo

Other Decks in Technology

Transcript

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

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

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

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

    SO • Obriga toda a equipe a ser “especialista” em infra • Tempo
  5. 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?
  6. 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
  7. 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
  8. 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
  9. Docker - Filesystem • Para rodar um Linux, geralmente precisamos:

    • bootfs - Boot filesystem • bootloader e kernel • rootfs - Root filesystem • restante dos arquivos do sistema
  10. 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
  11. Docker - Images • No docker, image é um layer

    read-only • Herança de images • Base image: quando não tem pai
  12. Docker - Container • É um layer read-write, montado a

    partir de um image (e seus parentes) • Configuração de rede e limite de recursos
  13. 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
  14. 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)
  15. 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
  16. 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