Docker + Django

Post on 24-May-2015

5.877 views 2 download

description

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

Transcript of Docker + Django

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!