O documento introduz o Docker, discutindo como ele resolve o problema da "matriz infernal" ao empacotar aplicações em containers leves que podem rodar em qualquer ambiente, da mesma forma que contêineres resolvem os problemas do transporte de cargas. Também discute os benefícios do Docker para desenvolvedores e operadores, além de casos de uso e tópicos avançados.
2. Conteúdo
• Introdução ao Docker, Containers, e a Matriz Infernal
• Por que as pessoas se preocupam: Separação de Interesses
• Discussão Técnica
• Casos de Uso
• Tópicos Avançados: Networking, Data
• OpenStack
• Saiba Mais
3. Nos 2 anos após o lançamento
• >10.561 commits
• >16.186 github stars
• >666 contribuidores da comunidade
• >2.875 forks
• Um número imenso de aplicativos
baseados em Docker
• UIs, mini-PaaS, Remote Desktop….
• >2000 aplicações dockerizadas
• Memcached, Redis, Node.js…e Hadoop
• Integração com Jenkins, Travis, Chef,
Puppet, Vagrant, OpenStack, entre
outros.
5. Static website
User DB
Web frontend
Queue Analytics DB
Background workers
API endpoint
nginx 1.5 + modsecurity + openssl + bootstrap 2
postgresql + pgv8 + v8
hadoop + hive + thrift + OpenJDK
Redis + redis-sentinel
Ruby + Rails + sass + Unicorn
Python 3.0 + celery + pyredis + libcurl + ffmpeg + libopencv + nodejs +
phantomjs
Python 2.7 + Flask + pyredis + celery + psycopg + postgresql-client
Development VM
QA server
Public Cloud
Disaster recovery
Contributor’s laptop
Production Servers
O Desafio
Multiplicity of Stacks
Multiplicity of
hardware
environments
Production Cluster
Customer Data Center
Do services and apps
interact
appropriately?
Can I migrate
smoothly and
quickly?
6. A Matriz Infernal
Static website
Web frontend
Background workers
User DB
Analytics DB
Queue
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
Development
VM QA Server Single Prod
Server Onsite Cluster Public Cloud Contributor’s
laptop
Customer
Servers
7. Multiplicity of Goods
transporting/storing
Multipilicity of
methods for
Do I worry about
how goods interact
(e.g. coffee beans
next to spices)
Can I transport quickly
and smoothly
(e.g. from boat to train
to truck)
O transporte de cargas Pré-1960
9. Multiplicity of Goods
Multiplicity of
methods for
transporting/storing
Do I worry about
how goods interact
(e.g. coffee beans
next to spices)
Can I transport
quickly and smoothly
(e.g. from boat to
train to truck)
Solução: Envio Intermodal em Containers
...no caminho , podem ser
carregados e descarregados,
empilhados, transportados de
forma eficiente em longas
distâncias, e transferidos de um
meio de transporte para outro.
Um contêiner padrão que é
carregado com praticamente
todos os bens, e permanece
fechado até que ele atinja a
entrega final.
10. Docker é um sistema de containers para código!
Static website User DB Web frontend Queue Analytics DB
Development
VM
QA server Public Cloud Contributor’s
laptop
Multiplicity of Stacks
Multiplicity of
hardware
environments
Production
Cluster
Customer Data
Center
Do services and apps
interact
appropriately?
Can I migrate
smoothly and quickly
...que pode ser manipulado
através de operações-padrão e
executar de forma consistente em
praticamente qualquer plataforma
de hardware.
Uma engine que permite que
qualquer carga útil venha a
ser encapsulada como um
recipiente auto-suficiente
leve, portátil...
11. Static website
Web frontend
Background workers
User DB
Analytics DB
Queue
Development
VM QA Server Single Prod
Server Onsite Cluster Public Cloud Contributor’s
laptop
Customer
Servers
Docker elimina a Matriz Infernal!
12. Porque os Desenvolvedores se importam
• Faça o build uma vez e…(finalmente) rode em qualquer lugar*
• Um ambiente execução limpo, seguro, higiênico e portátil para o seu aplicativo.
• Sem preocupações com falta de dependências, pacotes e outros pontos de dor durante as
implantações subsequentes.
• Execute cada aplicativo em seu próprio container, assim você pode executar várias versões de
bibliotecas e outras dependências para cada aplicação sem se preocupar.
• Automatizar testes, integração, packaging... você pode fazer um script para qualquer coisa.
• Reduzir/eliminar as preocupações sobre compatibilidade em diferentes plataformas, suas ou
de seus clientes.
• Cheap, zero-penalty containers to deploy services? A VM without the overhead of a VM?
Instant replay and reset of image snapshots? That’s the power of Docker
13. Porque os operadores de infraestrutura se
importam
• Configure uma vez… rode qualquer coisa
• Faça todo o ciclo de vida de uma aplicação mais eficiente, consistente e repetível.
• Aumentar a qualidade do código produzido pelos desenvolvedores.
• Eliminar inconsistências entre desenvolvimento, teste, produção e ambientes de clientes.
• Suporte a segregação de funções.
• Melhora significativamente a velocidade e a confiabilidade da implantação contínua e dos
sistemas de integração contínua.
• Porque os recipientes são tão leves, tem o potencial de solucionar os problemas de
desempenho, os custos, a implantação e problemas de portabilidade normalmente associados
com VMs.
14. Porque funciona - separação de interesses
• Zé, o Desenvolvedor
• Se preocupa com o que está dentro
do container:
• O Código
• As Bibliotecas
• O Gerenciador de Pacotes
• As Aplicações
• Os Dados
• Todos os servidores Linux parecem
ser o mesmo.
• Jão, o Operador
• Se preocupa com o que está
fora do container
• Logging
• Acesso Remoto
• Monitoramento
• Network config
• Todos os containers start,
stop, copy, attach, migrate,
etc. da mesma forma.
15. Mais explicações técnicas
PORQUE O QUE
• High Level - É uma VM leve
• Espaço de processos próprio
• Network própria
• Pode executar coisas como root
• Pode ter seu próprio /sbin/init
(separado do host)
• <<machine container>>
• Low Level - chroot com esteróides
• Pode também não ter seu próprio
/sbin/init
• Container=processos isolados
• Compartilha o kernel com o host
• Sem emulação de dispositivos
(nem HVM nem PV) do host)
• <<application container>>
• Roda em qualquer lugar
• Independete da versão do kernel
(2.6.32+)
• Independente da distro do host
• Físico ou virtual, cloud ou não
• Roda qualquer coisa
• Se alguma coisa roda no host,
rodará no container
• i.e. se alguma coisa roda no Linux,
rodará no container.
16. Containers vs. VMs
App
A
Bins/
Libs
Hypervisor (Type 2)
Host OS
Server
Bins/
Libs
Guest
OS
App
A’
Guest
OS
App
B
Bins/
Libs
Guest
OS
App A’
Docker
Host OS
Server
App A
Bins/Libs
Bins/Libs
App B
App B’
App B’
App B’
VM
Container
Containers são isolados,
mas compartilham o OS e,
quando
appropriate, bins/libraries
Guest
OS
Guest
OS
...o que resulta em implementação
significativamente mais rápida, muito menos
sobrecarga, migração mais fácil, restart mais
rápido
17. Porque os containers do Docker são leves?
VMs Containers
App
A
Bins/
Libs
Original App
(No OS to take
up space, resources,
or require restart)
App Δ
Bins/
App
A
Bins/
Libs
App
A’
Bins/
Libs
Guest
OS
Modified App
Copy on write
capabilities allow
us to only save the diffs
Between container A
and container
A’
VMs
App
A
Bins/
Libs
Guest
OS
Every app, every copy of an
app, and every slight modification
of the app requires a new virtual server
App
A
Copy of
App
No OS. Can
Share bins/libs
Guest
OS
Guest
OS
18. Quais os princípios básicos doDocker?
Dockerfile
For
A
Source
Code
Repository
Docker Engine
Docker
Container
Image
Registry
Build
Docker
Host 2 OS (Linux)
Container
A
Container
B
Container
C
Container A
Push
Search
Pull
Run
Host 1 OS (Linux)
19. Mudanças e Atualizações
App
A’’
Bins/
Libs
Docker Engine
Docker
Container
Image
Registry
Push
Docker Engine
Update
App
A
Bins/
Libs
App Δ
Bins/
Base
Container
Image
Host is now running A’’
Container
Mod A’’
App Δ
Bins/
App
A
Bins/
Libs
Bins/
Host running A wants to upgrade to A’’.
Requests update. Gets only diffs
Container
Mod A’
20. Casos de Uso
• Ted Dziuba sobre o Uso de Docker para integração contínua no Ebay
• https://speakerdeck.com/teddziuba/docker-at-ebay
• http://www.youtube.com/watch?feature=player_embedded&v=0Hi0W4gX--4
• Sasha Klizhentas sobre o uso do Docker no Mailgun da Rackspace
• http://www.youtube.com/watch?feature=player_embedded&v=CMC3xdAo9RI
• Sebastien Pahl sobre o uso do Docker na CloudFlare
• http://www.youtube.com/watch?feature=player_embedded&v=-Lj3jt_-3r0
• Cambridge HealthCare
• http://blog.howareyou.com/post/62157486858/continuous-delivery-with-docker-and-jenkins-part-
i
• Red Hat Openshift and Docker
• https://www.openshift.com/blogs/technical-thoughts-on-openshift-and-docker
21. Casos de Uso - Na Comunidade
Use Case Examples Link
Clusters Building a MongoDB cluster using docker http://bit.ly/1acbjZf
Production Quality MongoDB Setup with Docker http://bit.ly/15CaiHb
Wildfly cluster using Docker on Fedora http://bit.ly/1bClX0O
Build your own PaaS OpenSource PaaS built on Docker, Chef, and Heroku Buildpacks http://deis.io
Web Based Environment
JiffyLab – web based environment for the instruction, or lightweight use of, Python and
for Instruction
UNIX shell
http://bit.ly/12oaj2K
Easy Application
Deployment
Deploy Java Apps With Docker = Awesome http://bit.ly/11BCvvu
How to put your development environment on docker http://bit.ly/1b4XtJ3
Running Drupal on Docker http://bit.ly/15MJS6B
Installing Redis on Docker http://bit.ly/16EWOKh
Create Secure Sandboxes Docker makes creating secure sandboxes easier than ever http://bit.ly/13mZGJH
Create your own SaaS Memcached as a Service http://bit.ly/11nL8vh
Automated Application
Deployment
Multi-cloud Deployment with Docker http://bit.ly/1bF3CN6
Continuous Integration
and Deployment
Next Generation Continuous Integration & Deployment with dotCloud’s Docker and
Strider
http://bit.ly/ZwTfoy
Testing Salt States Rapidly With Docker http://bit.ly/1eFBtcm
Lightweight Desktop
Virtualization
Docker Desktop: Your Desktop Over SSH Running Inside Of A Docker Container
http://bit.ly/14RYL6x
22. Advanced topics
• Data
• Today: Externally mounted volumes
• Share volumes between containers
• Share volume between a containers and underlying hosts
• high-performance storage backend for your production database
• making live development changes available to a container, etc.
• Optional: specify memory limit for containers, CPU priority
• Device mapper/ LVM snapshots in 0.7
• Futures:
• I/O limits
• Container resource monitoring (CPU & memory usage)
• Orchestration (linking & synchronization between containers)
• Cluster orchestration (multi-host environment)
• Networking
• Supported today:
• UDP/TCP port allocation to containers
• specify which public port to redirect. If you don’t specify a public port, Docker will revert to allocating a random public port.
• Docker uses IPtables/netfilter
• IP allocation to containers
• Docker uses virtual interfaces, network bridge,
• Futures:
• See Pipework (Upstream) : Software-Defined Networking for Linux Containers (https://github.com/jpetazzo/pipework)
• Certain pipework concepts will move from upstream to part of core Docker
• Additional capabilities come with libvirt support in 0.8-0.9 timeframe
23. OpenStack / Docker
New hypervisor to enable Nova to deploy Linux containers
24. Porque Docker + OpenStack
• Alternativa para as VMs presentes na OpenStack (hoje)
• Implantação mais fácil da OpenStack (hoje)
• Implantação de aplicativos em cross cloud.
• Orquestração de containers com OpenStack Heat
25. Quer aprender mais?
• www.docker.io:
• Documentação
• Introdução: tutorial interativo, instruções de instalação, guia de iniciação,
• Sobre: Whitepaper Introdutória: http://www.docker.io/the-whole-story/
• Github: dotcloud/docker
• IRC: freenode/#docker
• Google groups: groups.google.com/forum/#!forum/docker-user
• Twitter: follow @docker
• Meetups: https://www.docker.io/meetups/
• Através de mim: Alexandre Teles (eu@alexteles.com)