24

Containers com docker #CPRecife4

Embed Size (px)

Citation preview

Page 1: Containers com docker #CPRecife4
Page 2: Containers com docker #CPRecife4

David RuizCTO Futura Networks / Campus Party@wupsbr – [email protected] – http://wupsbr.com

Page 3: Containers com docker #CPRecife4

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?

Page 4: Containers com docker #CPRecife4

Adoção muito rápida

Page 5: Containers com docker #CPRecife4

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

Page 6: Containers com docker #CPRecife4

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

Page 7: Containers com docker #CPRecife4
Page 8: Containers com docker #CPRecife4

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

Page 9: Containers com docker #CPRecife4

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

Outra matriz do inferno!

Page 10: Containers com docker #CPRecife4

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

Page 11: Containers com docker #CPRecife4

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

Page 12: Containers com docker #CPRecife4

• 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

Page 13: Containers com docker #CPRecife4

• 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

Page 14: Containers com docker #CPRecife4

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

Page 15: Containers com docker #CPRecife4

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?

Page 16: Containers com docker #CPRecife4

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

Page 17: Containers com docker #CPRecife4

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

Page 18: Containers com docker #CPRecife4

• 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?

Page 19: Containers com docker #CPRecife4

• 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

Page 20: Containers com docker #CPRecife4

---------------------------------------------------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

Page 21: Containers com docker #CPRecife4

---------------------------------------------------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

Page 22: Containers com docker #CPRecife4

• 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

Page 23: Containers com docker #CPRecife4

• 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

Page 24: Containers com docker #CPRecife4

David RuizCTO Futura Networks / Campus Party

@wupsbr – [email protected] – http://wupsbr.com