Docker do zero
ao deploy
Marcio Trindade
Quem sou eu
• Marcio Trindade (@marciotrindade);
• Formado em Ed. Física;
• Trabalho com desenvolvimento desde 2004;
• Blog: marciotrindade.com;
• Trabalho com Ruby desde 2008;
Antes era assim
Agora está assim
WebService
nginx + ssl + assets
Banco de Dados
postgresql + pgv8 + v8
Fila
Redis
Workers
Ruby + sidekiq
Web app
Ruby + rails
API
Golang
Cache
Memcached
Por que Container
• Conseguir isolar cada parte da sua aplicação;
• Tudo o que cada parte precisa está lá;
• Ter o ambiente mais próximo ao de produção;
• Simplificar o desenvolvimento;
• Simplificar o deploy;
Container x VM
O que é Docker?
• Uma plataforma open-source para gerenciar
containers;
• Escrito pela equipe do Docker, Inc.;
• Sob a licença Apache 2.0;
Componentes
• Docker client and server
• Docker Images
• Registries
• Docker Containers
Client and server
• Já vem com um client (cli);
• Conversa com o servidor ou daemon;
• Possui uma api RESTfull completa;
• Pode estar ou não na mesma maquina;
Docker images
• Forma do docker construir containers;
• É a criação do ambiente a partir do file system com
instruções do tipo:

Add a file

Run a comand
• Podemos considerar imagens como o código fonte
dos containers.
Registries
• Um repositório de imagens;
• Pode ser público ou privado;
• Docker Hub (público);
• Possui milhares de imagens prontas;
Containers
• Criado a partir de uma imagem;
• Contém a sua app ou serviço;
• É a camada de execução;
• Pode rodar um ou mais processos;
Básico de Docker
Live code
Dockerfile
• Evite fazer commit
• Forma de automatizar
• Simples e leve
• Rápido (usa cache)
Dockerfile
• FROM - A imagem pra utilizar

FROM ubuntu:14.04
• RUN - Executar comandos necessários pra preparar o sistema

RUN apt-get install -y package-foo && apt-get install -y package-bar
• CMD - Comando que seu container deve rodar

CMD ["rake", "db:migrate"]
• EXPOSE - Expor a porta que o serviço vai escutar

EXPOSE 80
• ENV - Criar variaveis de ambiente

ENV RAILS_ENV production
• COPY or ADD - Copiar um conteúdo pra dentro do container

COPY Gemfile /myapp/Gemfile
• VOLUME - Expor uma area de de arquivos mutaveis

VOLUME . /my_app
• WORKDIR - Qual o path de trabalho da sua aplicação

WORKDIR /my_app
Dockerfile
Live code
Docker Compose
• Antigo "fig";
• Cria e gerencia containers docker;
• Define multi-containers em um único arquivo;
• Cria link entre os containers;
• Sobe suas aplicações com um único comando;
Docker Compose
Live code
Referências
• The Docker Book - James Turnbull
• https://www.docker.com/
• https://docs.docker.com/compose/
• https://www.youtube.com/watch?v=ZzQfxoMFH0U
• http://www.rightscale.com/blog/cloud-
management-best-practices/docker-vs-vms-
combining-both-cloud-portability-nirvana
Duvidas?
Marcio Trindade
by Locaweb

Alagoas Dev Day

  • 1.
    Docker do zero aodeploy Marcio Trindade
  • 2.
    Quem sou eu •Marcio Trindade (@marciotrindade); • Formado em Ed. Física; • Trabalho com desenvolvimento desde 2004; • Blog: marciotrindade.com; • Trabalho com Ruby desde 2008;
  • 4.
  • 5.
    Agora está assim WebService nginx+ ssl + assets Banco de Dados postgresql + pgv8 + v8 Fila Redis Workers Ruby + sidekiq Web app Ruby + rails API Golang Cache Memcached
  • 6.
    Por que Container •Conseguir isolar cada parte da sua aplicação; • Tudo o que cada parte precisa está lá; • Ter o ambiente mais próximo ao de produção; • Simplificar o desenvolvimento; • Simplificar o deploy;
  • 7.
  • 8.
    O que éDocker? • Uma plataforma open-source para gerenciar containers; • Escrito pela equipe do Docker, Inc.; • Sob a licença Apache 2.0;
  • 9.
    Componentes • Docker clientand server • Docker Images • Registries • Docker Containers
  • 10.
    Client and server •Já vem com um client (cli); • Conversa com o servidor ou daemon; • Possui uma api RESTfull completa; • Pode estar ou não na mesma maquina;
  • 11.
    Docker images • Formado docker construir containers; • É a criação do ambiente a partir do file system com instruções do tipo:
 Add a file
 Run a comand • Podemos considerar imagens como o código fonte dos containers.
  • 12.
    Registries • Um repositóriode imagens; • Pode ser público ou privado; • Docker Hub (público); • Possui milhares de imagens prontas;
  • 13.
    Containers • Criado apartir de uma imagem; • Contém a sua app ou serviço; • É a camada de execução; • Pode rodar um ou mais processos;
  • 14.
  • 15.
    Dockerfile • Evite fazercommit • Forma de automatizar • Simples e leve • Rápido (usa cache)
  • 16.
    Dockerfile • FROM -A imagem pra utilizar
 FROM ubuntu:14.04 • RUN - Executar comandos necessários pra preparar o sistema
 RUN apt-get install -y package-foo && apt-get install -y package-bar • CMD - Comando que seu container deve rodar
 CMD ["rake", "db:migrate"] • EXPOSE - Expor a porta que o serviço vai escutar
 EXPOSE 80 • ENV - Criar variaveis de ambiente
 ENV RAILS_ENV production • COPY or ADD - Copiar um conteúdo pra dentro do container
 COPY Gemfile /myapp/Gemfile • VOLUME - Expor uma area de de arquivos mutaveis
 VOLUME . /my_app • WORKDIR - Qual o path de trabalho da sua aplicação
 WORKDIR /my_app
  • 17.
  • 18.
    Docker Compose • Antigo"fig"; • Cria e gerencia containers docker; • Define multi-containers em um único arquivo; • Cria link entre os containers; • Sobe suas aplicações com um único comando;
  • 19.
  • 20.
    Referências • The DockerBook - James Turnbull • https://www.docker.com/ • https://docs.docker.com/compose/ • https://www.youtube.com/watch?v=ZzQfxoMFH0U • http://www.rightscale.com/blog/cloud- management-best-practices/docker-vs-vms- combining-both-cloud-portability-nirvana
  • 21.