Slide 1

Slide 1 text

Docker + Django Allisson Azevedo

Slide 2

Slide 2 text

Allisson Azevedo • Desenvolvedor Web na SodaVirtual • http://github.com/allisson • http://youtube.com/allissonazevedo • http://slideshare.net/allisson • http://speakerdeck.com/allisson

Slide 3

Slide 3 text

O Problema • Preciso rodar meu webapp • Preciso de um ambiente pré configurado • Minha equipe também

Slide 4

Slide 4 text

Solução #1 • Arquivo README no repositório • Dependências para instalar no SO • Alguns possíveis “truques” para o webapp funcionar

Slide 5

Slide 5 text

Problemas #1 • Diferentes SO • Diferentes versões do mesmo SO • Obriga toda a equipe a ser “especialista” em infra • Tempo

Slide 6

Slide 6 text

Solução #2 • Virtualização • Vagrant • Vagrantfile no repo do projeto • vagrant up

Slide 7

Slide 7 text

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?

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

LXC - Quem usa? • Heroku • dotCloud / Docker INC

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Docker - Filesystem • Para rodar um Linux, geralmente precisamos: • bootfs - Boot filesystem • bootloader e kernel • rootfs - Root filesystem • restante dos arquivos do sistema

Slide 14

Slide 14 text

Docker - Filesystem

Slide 15

Slide 15 text

Docker - Filesystem

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Docker - Layers

Slide 18

Slide 18 text

Docker - Images • No docker, image é um layer read-only • Herança de images • Base image: quando não tem pai

Slide 19

Slide 19 text

Docker - Container • É um layer read-write, montado a partir de um image (e seus parentes) • Configuração de rede e limite de recursos

Slide 20

Slide 20 text

Docker - Container

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

Demo

Slide 23

Slide 23 text

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)

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

Links • http://blog.docker.io • https://github.com/progrium/dokku • http://deis.io • https://github.com/shipyard/shipyard

Slide 27

Slide 27 text

Obrigado!