Docker + Django

27
Docker + Django Allisson Azevedo

description

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

Transcript of Docker + Django

Page 1: Docker + Django

Docker + DjangoAllisson Azevedo

Page 2: Docker + Django

Allisson Azevedo

• Desenvolvedor Web na SodaVirtual

• http://github.com/allisson

• http://youtube.com/allissonazevedo

• http://slideshare.net/allisson

• http://speakerdeck.com/allisson

Page 3: Docker + Django

O Problema

• Preciso rodar meu webapp

• Preciso de um ambiente pré configurado

• Minha equipe também

Page 4: Docker + Django

Solução #1

• Arquivo README no repositório

• Dependências para instalar no SO

• Alguns possíveis “truques” para o webapp funcionar

Page 5: Docker + Django

Problemas #1

• Diferentes SO

• Diferentes versões do mesmo SO

• Obriga toda a equipe a ser “especialista” em infra

• Tempo

Page 6: Docker + Django

Solução #2

• Virtualização

• Vagrant

• Vagrantfile no repo do projeto

• vagrant up

Page 7: Docker + Django

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?

Page 8: Docker + Django

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

Page 9: Docker + Django

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

Page 10: Docker + Django

LXC no Ubuntu 12.04

• https://help.ubuntu.com/12.04/serverguide/lxc.html

Page 11: Docker + Django

LXC - Quem usa?

• Heroku

• dotCloud / Docker INC

Page 12: Docker + Django

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

Page 13: Docker + Django

Docker - Filesystem

• Para rodar um Linux, geralmente precisamos:

• bootfs - Boot filesystem

• bootloader e kernel

• rootfs - Root filesystem

• restante dos arquivos do sistema

Page 14: Docker + Django

Docker - Filesystem

Page 15: Docker + Django

Docker - Filesystem

Page 16: Docker + Django

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

Page 17: Docker + Django

Docker - Layers

Page 18: Docker + Django

Docker - Images

• No docker, image é um layer read-only

• Herança de images

• Base image: quando não tem pai

Page 19: Docker + Django

Docker - Container

• É um layer read-write, montado a partir de um image (e seus parentes)

• Configuração de rede e limite de recursos

Page 20: Docker + Django

Docker - Container

Page 21: Docker + Django

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

Page 22: Docker + Django

Demo

Page 23: Docker + Django

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)

Page 24: Docker + Django

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

Page 25: Docker + Django

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

Page 26: Docker + Django

Links

• http://blog.docker.io

• https://github.com/progrium/dokku

• http://deis.io

• https://github.com/shipyard/shipyard

Page 27: Docker + Django

Obrigado!