Upload
allisson-azevedo
View
5.877
Download
2
Embed Size (px)
DESCRIPTION
Slides do evento https://plus.google.com/events/c0ulqmr27796bh8vbsv7bl71698
Citation preview
Docker + DjangoAllisson Azevedo
Allisson Azevedo
• Desenvolvedor Web na SodaVirtual
• http://github.com/allisson
• http://youtube.com/allissonazevedo
• http://slideshare.net/allisson
• http://speakerdeck.com/allisson
O Problema
• Preciso rodar meu webapp
• Preciso de um ambiente pré configurado
• Minha equipe também
Solução #1
• Arquivo README no repositório
• Dependências para instalar no SO
• Alguns possíveis “truques” para o webapp funcionar
Problemas #1
• Diferentes SO
• Diferentes versões do mesmo SO
• Obriga toda a equipe a ser “especialista” em infra
• Tempo
Solução #2
• Virtualização
• Vagrant
• Vagrantfile no repo do projeto
• vagrant up
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?
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
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
LXC no Ubuntu 12.04
• https://help.ubuntu.com/12.04/serverguide/lxc.html
LXC - Quem usa?
• Heroku
• dotCloud / Docker INC
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
Docker - Filesystem
• Para rodar um Linux, geralmente precisamos:
• bootfs - Boot filesystem
• bootloader e kernel
• rootfs - Root filesystem
• restante dos arquivos do sistema
Docker - Filesystem
Docker - Filesystem
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
Docker - Layers
Docker - Images
• No docker, image é um layer read-only
• Herança de images
• Base image: quando não tem pai
Docker - Container
• É um layer read-write, montado a partir de um image (e seus parentes)
• Configuração de rede e limite de recursos
Docker - Container
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
Demo
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)
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
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
Links
• http://blog.docker.io
• https://github.com/progrium/dokku
• http://deis.io
• https://github.com/shipyard/shipyard
Obrigado!