Orquestrando Docker Containers Machine, Swarm e Compose Roberto G. Hashioka - @rhashioka 2015-06-10 São Paulo/SP!
Informações Pessoais Roberto Gandolfo Hashioka @rogaha (Github) e @rhashioka (Twitter)! No Docker em Maio 2013 (Dotcloud)! Finanças -> Software Engineer! Projeto Atual: Docker Hub/Metrics!
Objetivo da Apresentação Explicar o que é o Docker e como usá-lo Explicar o paradigma entre dev e ops! Explicar como rodar aplicações distribuidas em qualquer ambiente! Compartilhar experiências (Silicon Valley)!
Informações dos Projetos Projetos no Github Docker (github.com/docker/docker)! Docker Machine (github.com/docker/machine)! Docker Swarm (github.com/docker/swarm)! Docker Compose (github.com/docker/compose)! Aplicações distribuidas com Docker são modularizadas, portáveis e dinâmicas
O que é o Docker Engine? 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)!
Contrução: docker build Dockerfile 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!
Exemplo de Dockerfile -----------------------------------------------------------------------------------------------------------! FROM ubuntu:14.04! MAINTAINER Roberto Hashioka (roberto@docker.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!
Distribuição: docker pull / push 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 (htt ps://registry.hub.docker.com/repos/library/)!
Execução: docker run 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 De bian, Ubuntu, CentOS na mesmo servidor/laptop! Se funciona no seu laptop, irá funcionar no servidor! RESOLVE grande parte dos problemas entre DEV e OPS!
Estatíticas da comunidade Docker > 950 Contribuidores no Github > 80.000 Projetos dockerized no Github > 140.000 Repositórios no Docker Hub! > 48.000 membros no Meetup.com, > 150 cidades, > 50 países! > 400.000.000 images do docker baixadas (docker pull)!
Docker Machine: Zero to Docker em minutos Antes Depois Várias etapas de setup! Um comando de setup! Conecta a apenas um host! Instalação e configuração para aquele host específico! Provisiona o Docker Engine em qualquer host! Integrações para criar hosts com o docker nas nuvens!
Docker Machine
Docker Machine $ machine create
! Docker Swarm: Otimize recursos, Tolerância a falhas e alta disponibilidade Antes Depois Sem solução nativa! Cada Docker Engine é independente entre si! Cluster de Docker Engines como se fosse um só! Interface única de dev.! Swarm dimensiona seu app! Agendamento nativa das app! Integração com outros agendadores!
Docker Swarm $ docker run swarm
Docker Swarm $ docker run
Docker Swarm $ docker run Batteries included but swappable
! Docker Compose: Simplifica Aplicações multicontainer Antes Depois Simples aplicações individuais em containers! Único arquivo.yml que define sua aplicação inteira! Sem solução nativa para aplicações multi-containers! Rode sua aplicação completa com um único comando! Ineficiente: Precisa repetir commandos para cada container! Atualize facilmente sua aplicação com o arquivo.yml!!
Docker Compose containers: web: build:. command: python app.py ports: - "5000:5000" volumes: -.:/code links: - redis environment: - PYTHONUNBUFFERED=1 redis: image: redis:latest command: redis-server --appendonly yes
Docker Compose $ docker-compose
Docker Compose $ docker-compose
A Docker Distributed Application Happy Devs $ docker Web x8 Database x2 Cache x2 Ops Flexibility
Ecosistema de Gestão de Containers Service Discovery Clustering and Scheduling Infrastructure
Docker Hub Promo code: docker-sp-meetup https://registry.hub.docker.com/plans/micro @rhashioka
Obrigado! Perguntas? @rhashioka