David RuizCTO Futura Networks / Campus Party@wupsbr – [email protected] – http://wupsbr.com
Uma abstração opensource que automatiza a implementação de qualquer aplicação de forma leve e portátil em containers auto-suficientes, onde poderão ser executados nos mais diversos ambientes.
O Que é Docker?
Adoção muito rápida
Static website
Web frontend
User DBQueue Analytics DB
Background workers
API endpoint
nginx 1.5 + modsecurity + openssl + bootstrap 2
postgresql + pgv8 + v8
hadoop + hive + thrift + OpenJDK
Ruby + Rails + sass + Unicorn
Redis + redis-sentinel
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 recoveryContributor’s laptop
Production Servers
Mul
tiplic
ity o
f Sta
cks
Mul
tiplic
ity o
f ha
rdw
are
envi
ronm
ents
Production Cluster
Customer Data Center
Do services and apps interact
appropriately?
Can I migrate
smoothly and quickly?
O desafio
Static website
Web frontend
Background workers
User DB
Analytics DB
Queue
Development VM QA Server Single Prod
ServerOnsite Cluster
Public Cloud
Contributor’s laptop
Customer Servers
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
A matriz do inferno
Mul
tiplic
ity o
f Goo
dsM
ultip
ilici
ty o
f m
etho
ds fo
r tr
ansp
ortin
g/st
orin
g
Do I worry about
how goods interact
(e.g. coffee beans next to spices)
Can I transport quickly and sm
oothly(e.g. from
boat to train to truck)
Transporte de carga pré-1960
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
Outra matriz do inferno!
Mul
tiplic
ity o
f Goo
dsM
ultip
licity
of m
etho
ds fo
r tr
ansp
ortin
g/st
orin
gDo I w
orry about how
goods interact (e.g. coffee beans next to spices)
Can I transport quickly and sm
oothly(e.g. from
boat to train to truck)
...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.
Solução: Envio Intermodal com Containers
Static website Web frontend User DB Queue Analytics DB
Development VM
QA server Public Cloud Contributor’s laptop
Mul
tiplic
ity o
f Sta
cks
Mul
tiplic
ity o
f har
dwar
e en
viro
nmen
ts
Production ClusterCustomer Data Center
Do services and apps interact appropriately?
Can I migrate sm
oothly 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...
Docker é um container para código
• 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
* With the 0.7 release, we support any x86 server running a modern Linux kernel (3.2+ generally. 2.6.32+ for RHEL 6.5+, Fedora, & related)
Porque os desenvolvedores 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
Porque os desenvolvedores se importam
AppA
Hypervisor (Type 2)
Host OS
Server
GuestOS
Bins/Libs
AppA’
GuestOS
Bins/Libs
AppB
GuestOS
Bins/Libs
App A’
Docker
Host OS
Server
Bins/Libs
App ABins/Libs
App B
App B’
App B’
App B’VM
Container
Containers são isolados, mas compartilham o OS e, quando apropriado, bins/libraries
GuestOS
GuestOS
...o que resulta em implementação significativamente mais rápida, muito menos sobrecarga, migração mais fácil, restart mais rápido
Containers vs VMs
Bins/Libs
AppA
Original App(No OS to takeup space, resources,or require restart)
App Δ
Bins/
AppA
Bins/Libs
AppA’
GuestOS
Bins/Libs
Modified App
Copy on write capabilities allowus to only save the diffsBetween container A and containerA’
VMsEvery app, every copy of anapp, and every slight modificationof the app requires a new virtual server
AppA
GuestOS
Bins/Libs
Copy ofApp
No OS. CanShare bins/libs
AppA
GuestOS
GuestOS
VMs Containers
Porque containers em Docker são leves?
Source Code
Repository
DockerfileFor
A
Docker Engine
DockerContainer
Image Registry
Build
Docker
Host 2 OS (Linux)
Container A
Container B
Container C
Container A
Push
Search Pull
Run
Host 1 OS (Linux)
Princípios básicos do Docker
Docker Engine
DockerContainer
Image Registry
Docker Engine
Push
Update
Bins/Libs
AppA
App Δ
Bins/
Base Container
Image
Host is now running A’’
Container Mod A’’
App Δ
Bins/
Bins/Libs
AppA
Bins/
Bins/Libs
AppA’’
Host running A wants to upgrade to A’’. Requests update. Gets only diffs
Container Mod A’
Mudanças e atualizações
• Ferramenta que facilita a construção, distribuição e execução de qualquer a plicação em qualquer ambiente (VM, nuvem, servidor fisico, laptop)• Sua aplicação roda de forma isolada com seus próprios
processos, IP e file system, independente do host. Ou seja, dentro de um container• Construção: empacota sua aplicação numa imagem
(docker build)!• Distribuição: Move a imagem entre diferentes maquinas
(docker push/pull)!• Execução: Execute sua aplicação (docker run)!
O que é Docker Engine?
• Receita para criar uma imagem (container)• Começa de uma base: FROM ubuntu:14.04, fedora:20, debian:jessie• Rode comandos: RUN apt-get install –y firefox ssh• Copie seus dados:ADD /app/code /code/• Crie scripts de inicialização ou execute arquivos binários:CMD start_firefox.sh, /usr/sbin/sshd –D
Construção: docker build – Dockerfile
---------------------------------------------------FROM ubuntu:14.04MAINTAINER Seu Nome ([email protected])RUN apt-get update && apt-get install -y nginxRUN echo ’Hello Developers from Sao Paulo' > /usr/share/nginx/html/index.htmlEXPOSE 80---------------------------------------------------$ docker build –t rogaha/web .$ docker run –d –p 80:80 –-name container_web_demo_sp rogaha/web
Exemplo de Dockerfile
---------------------------------------------------FROM ubuntu:14.04MAINTAINER Seu Nome ([email protected])RUN apt-get update && apt-get install -y nginxRUN echo ’Hello Developers from Sao Paulo' > /usr/share/nginx/html/index.htmlEXPOSE 80---------------------------------------------------$ docker build –t rogaha/web .$ docker run –d –p 80:80 –-name container_web_demo_sp rogaha/web
Exemplo de Dockerfile
• Transfere sua aplicação dockerzizada de um servidor para outro• Registry Hub: Repositório central de imagens criadas pela
comunidade• O objetivo principal do Registry Hub é facilitar a criação de
aplicações• Milhares de images foram criadas e são mantidas pela
comunidade. Por exemplo: nginx, ubuntu, postgres, redis, node, centos, wordpress, java:• https://registry.hub.docker.com/repos/library/
Distribuição: docker pull / push
• Roda as aplicações de forma consistente e confiável• Elimina os problemas de diferenças entre versionamento
das dependências• Os containers rodam de forma isolada. Você pode rodar
aplicações em Debian, Ubuntu, CentOS na mesmo servidor/laptop• Se funciona no seu laptop, irá funcionar no servidor• RESOLVE grande parte dos problemas entre DEV e OPS
Execução: docker run
David RuizCTO Futura Networks / Campus Party
@wupsbr – [email protected] – http://wupsbr.com
Top Related