David Ruiz
CTO Futura Networks / Campus Party
@wupsbr – wupsbr@gmail.com – 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 DB
Queue 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 recovery
Contributor’s laptop
Production Servers
MultiplicityofStacksMultiplicityof
hardware
environments
Production Cluster
Customer Data Center
Doservicesandapps
interact
appropriately?
CanImigrate
smoothlyand
quickly?
O desafio
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
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
A matriz do inferno
MultiplicityofGoodsMultipilicityof
methodsfor
transporting/storing
DoIworryabout
howgoodsinteract
(e.g.coffeebeans
nexttospices)
CanItransportquickly
andsmoothly
(e.g.fromboattotrain
totruck)
Transporte de carga pré-1960
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
Outra matriz do inferno!
MultiplicityofGoods
Multiplicityofmethodsfor
transporting/storing
DoIworryabouthow
goodsinteract(e.g.coffee
beansnexttospices)
CanItransportquicklyand
smoothly
(e.g.fromboattotrainto
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 frontendUser DB Queue Analytics DB
Development VM
QA server
Public Cloud Contributor’s laptop
MultiplicityofStacksMultiplicityofhardware
environments
Production ClusterCustomer Data Center
Doservicesandapps
interactappropriately?
CanImigratesmoothlyand
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
App
A
Hypervisor (Type 2)
Host OS
Server
Guest
OS
Bins/
Libs
App
A’
Guest
OS
Bins/
Libs
App
B
Guest
OS
Bins/
Libs
AppA’
Docker
Host OS
Server
Bins/Libs
AppA
Bins/Libs
AppB
AppB’
AppB’
AppB’
VM
Container
Containers são isolados, mas
compartilham o OS e, quando
apropriado, 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
Containers vs VMs
Bins/
Libs
App
A
Original App
(No OS to take
up space, resources,
or require restart)
AppΔ
Bins/
App
A
Bins/
Libs
App
A’
Guest
OS
Bins/
Libs
Modified App
Copy on write
capabilities allow
us to only save the diffs
Between container A
and container
A’
VMs
Every app, every copy of an
app, and every slight modification
of the app requires a new virtual server
App
A
Guest
OS
Bins/
Libs
Copy of
App
No OS. Can
Share bins/libs
App
A
Guest
OS
Guest
OS
VMs Containers
Porque containers em Docker são leves?
Source
Code
Repository
Dockerfile
For
A
Docker Engine
Docker
Container
Image
Registry
Build
Docker
Host 2 OS (Linux)
ContainerA
ContainerB
ContainerC
ContainerA
Push
Search
Pull
Run
Host 1 OS (Linux)
Princípios básicos do Docker
Docker Engine
Docker
Container
Image
Registry
Docker Engine
Push
Update
Bins/
Libs
App
A
AppΔ
Bins/
Base
Container
Image
Host is now running A’’
Container
Mod A’’
AppΔ
Bins/
Bins/
Libs
App
A
Bins/
Bins/
Libs
App
A’’
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.04
MAINTAINER Seu Nome (z@z.com)
RUN apt-get update && apt-get install -y nginx
RUN echo ’Hello Developers from Sao Paulo' >
/usr/share/nginx/html/index.html
EXPOSE 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.04
MAINTAINER Seu Nome (z@z.com)
RUN apt-get update && apt-get install -y nginx
RUN echo ’Hello Developers from Sao Paulo' >
/usr/share/nginx/html/index.html
EXPOSE 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 Ruiz
CTO Futura Networks / Campus Party
@wupsbr – wupsbr@gmail.com – http://wupsbr.com

Containers com docker #CPRecife4

  • 2.
    David Ruiz CTO FuturaNetworks / Campus Party @wupsbr – wupsbr@gmail.com – http://wupsbr.com
  • 3.
    Uma abstração opensourceque 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?
  • 4.
  • 5.
    Static website Web frontend UserDB Queue 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 recovery Contributor’s laptop Production Servers MultiplicityofStacksMultiplicityof hardware environments Production Cluster Customer Data Center Doservicesandapps interact appropriately? CanImigrate smoothlyand quickly? O desafio
  • 6.
    Static website Web frontend Backgroundworkers User DB Analytics DB Queue Development VM QA Server Single Prod Server Onsite Cluster Public Cloud Contributor’s laptop Customer Servers ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A matriz do inferno
  • 8.
  • 9.
    ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Outra matriz do inferno!
  • 10.
    MultiplicityofGoods Multiplicityofmethodsfor transporting/storing DoIworryabouthow goodsinteract(e.g.coffee beansnexttospices) CanItransportquicklyand smoothly (e.g.fromboattotrainto 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
  • 11.
    Static website WebfrontendUser DB Queue Analytics DB Development VM QA server Public Cloud Contributor’s laptop MultiplicityofStacksMultiplicityofhardware environments Production ClusterCustomer Data Center Doservicesandapps interactappropriately? CanImigratesmoothlyand 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
  • 12.
    • Faça obuild 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
  • 13.
    • Configure umavez… 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
  • 14.
    App A Hypervisor (Type 2) HostOS Server Guest OS Bins/ Libs App A’ Guest OS Bins/ Libs App B Guest OS Bins/ Libs AppA’ Docker Host OS Server Bins/Libs AppA Bins/Libs AppB AppB’ AppB’ AppB’ VM Container Containers são isolados, mas compartilham o OS e, quando apropriado, 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 Containers vs VMs
  • 15.
    Bins/ Libs App A Original App (No OSto take up space, resources, or require restart) AppΔ Bins/ App A Bins/ Libs App A’ Guest OS Bins/ Libs Modified App Copy on write capabilities allow us to only save the diffs Between container A and container A’ VMs Every app, every copy of an app, and every slight modification of the app requires a new virtual server App A Guest OS Bins/ Libs Copy of App No OS. Can Share bins/libs App A Guest OS Guest OS VMs Containers Porque containers em Docker são leves?
  • 16.
    Source Code Repository Dockerfile For A Docker Engine Docker Container Image Registry Build Docker Host 2OS (Linux) ContainerA ContainerB ContainerC ContainerA Push Search Pull Run Host 1 OS (Linux) Princípios básicos do Docker
  • 17.
    Docker Engine Docker Container Image Registry Docker Engine Push Update Bins/ Libs App A AppΔ Bins/ Base Container Image Hostis now running A’’ Container Mod A’’ AppΔ Bins/ Bins/ Libs App A Bins/ Bins/ Libs App A’’ Host running A wants to upgrade to A’’. Requests update. Gets only diffs Container Mod A’ Mudanças e atualizações
  • 18.
    • Ferramenta quefacilita 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?
  • 19.
    • Receita paracriar 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
  • 20.
    --------------------------------------------------- FROM ubuntu:14.04 MAINTAINER SeuNome (z@z.com) RUN apt-get update && apt-get install -y nginx RUN echo ’Hello Developers from Sao Paulo' > /usr/share/nginx/html/index.html EXPOSE 80 --------------------------------------------------- $ docker build –t rogaha/web . $ docker run –d –p 80:80 –-name container_web_demo_sp rogaha/web Exemplo de Dockerfile
  • 21.
    --------------------------------------------------- FROM ubuntu:14.04 MAINTAINER SeuNome (z@z.com) RUN apt-get update && apt-get install -y nginx RUN echo ’Hello Developers from Sao Paulo' > /usr/share/nginx/html/index.html EXPOSE 80 --------------------------------------------------- $ docker build –t rogaha/web . $ docker run –d –p 80:80 –-name container_web_demo_sp rogaha/web Exemplo de Dockerfile
  • 22.
    • Transfere suaaplicaçã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
  • 23.
    • Roda asaplicaçõ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
  • 24.
    David Ruiz CTO FuturaNetworks / Campus Party @wupsbr – wupsbr@gmail.com – http://wupsbr.com