Conheça o Docker
Prof. Uirá Ribeiro
Introdução ao Docker
 Como entregar software sem dor ?
 Como garantir que o software que roda em desenvolvimento vai rodar
em produção?
 Como criar um ambiente em desenvolvimento que tenha a
infraestrutura de produção sem ”duplicar” a estrutura e dobrar os
custos?
 Como garantir que as várias camadas e peças de software funcionem
bem?
 Como não colocar ”todos os ovos” em uma só cesta ?
Introdução ao Docker
 O Docker funciona como um ”Contêiner” de software, capaz de
encapsular tudo que o software precisa para rodar
 Roda no Kernel existente
 Isola o ambiente do contêiner do ambiente do Host
 Possibilita criar uma arquitetura de micro-serviços
 Muito fácil de criar contêineres
 Os contêineres são executados de forma rápida e podem ser parados e
reiniciados e trocados em segundos
Introdução ao Docker
Introdução ao Docker
 Overhead de processamento é quase inexistente
 Overhead de rede é mínimo
 Contêineres são muito leves
 Um laptop típico pode rodar 10-100 contêineres facilmente
 Um servidor típico pode rodar de 100-1000 contêineres
 O que roda local, irá rodar no servidor com o mesmo comportamento,
independente da versão, da distribuição e das dependências de
software
Introdução ao Docker
Introdução ao Docker
 Um contêiner tem seu próprio espaço de processo (namespaces)
 Um contêiner tem sua própria rede interna
 Um contêiner pode rodar programas como ”root” sem problemas
 Pode ter seu próprio /sbin /etc /etc/init sem afetar o host
 Seu sistema de arquivos é incremental ”por camadas”. Isso permite
um rollback fácil.
 Docker CPU performance = performance nativa
 Docker Memória = % pequeno diferente da memória do Host
 Docker Rede = % pequeno de overhead
Pid namespace
Mnt namespace
Ipc namespace
Docker não é uma VM
 Docker NÃO é uma VM leve
 Docker aproveita o KERNEL do Host
 Docker não precisa de SO Convidado
 Docker isola o processo do Host
 Docker permite que você execute um ambiente diferente do ambiente
do Host
 Docker permite que você tenha uma biblioteca com dependências e
versões diferentes do Host
 Docker pode rodar em uma VM
 Docker pode rodar até em um Contêiner
VM x Docker
Como entregar software para diferentes
dispositivos ?
O que cabe no contêiner?
 Seu código fonte todo
 Seus binários
 Suas bibliotecas
 Seu gerenciador de pacotes favorito (APT-GET, RPM, YUM, YAST, etc)
 Seus aplicativos
 Seus serviços de SGBD (Mysql, Oracle, Mongo, PostgreSQL, etc
 Seus dados
E fora do contêiner, fica o que?
 Logging
 Acesso remoto
 Configuração de rede
 Monitoramento
E meus dados?
 Volumes permitem que um diretório específico exista dentro e fora do
contêiner
 Os contêineres podem compartilhar volumes em um mesmo Host
 Um diretório pode persistir mesmo que um contêiner seja deletado
 Volumes com dados podem ser criados em um Dockerfile ou CLI
 Uma alteração no sistema de arquivos de um contêiner pode ser
copiada para demais contêineres
Chega de Dev x Ops
Tá, mas qual a grande sacada?
 Sim, você pode fazer tudo com VMs.
 Sim, você pode automatizar com scripts
 Mas a graaaaaaande questão é fazer tudo r-i-d-i-c-u-l-a-m-e-n-t-e
fácil de usar
 Você pode utilizar as imagens de outras pessoas (SIM, o Ecossistema)
 Continua entrega / integração / teste / orquestração de software
 Você pode criar e compartilhar imagens (todos da equipe rodam a
mesma coisa)
 Provê uma maneira simples, PADRÃO e que pode ser REPRODUZIDA
com facilidade de entregar imagens
Configuração Simples
 Sim, funciona no LINUX
 Sim, funciona no MAC
 Sim, funciona no Windows
 Sim, funciona em VMs
 Altamente escalável
 Instalação simples através de git
 Provisionamento simples na AWS, Rackspace, Digital Ocean e Azure
Componentes do Docker
 Docker Daemon = roda em background, gerencia os contêineres e
imagens. Funciona através de uma API HTTP
 Docker Contêiner = Unidade padrão que os aplicativos e serviços residem
e são executados
 Docker Imagem = A base de um contêiner.
 Docker CLI = cliente que conversa com a API HTTP para processar as
requisições
 Docker Engine = Cria, entrega e roda os contêineres
 Docker Registry = Repositório publico ou privado de imagens
 Demais ferramentas de orquestração = ajudam na entrega e
monitoramento de contêineres
Fluxo de Trabalho do Docker
 Você trabalha com todos os componentes que precisa no
desenvolvimento
 Todos da equipe de desenvolvimento fazer código com o mesmo
ambiente (compartilham as imagens)
 Outros serviços necessários do código (RADIS, MEMCACHE, Banco)
também rodam nos contêineres. Você testa como deve ser no servidor
 Os contêineres podem ser criados em segundos e rodam
instantaneamente
Satisfeito com o resultado?
 Se você ficar satisfeito com o resultado, pode enviar sua imagem para
um repositório;
 Pode rodar automaticamente o contêiner em CI/CD
 Pode rodar em produção
 Permite crescimento fácil com mais contêineres e Loadbalance
FELICIDADE!!!
 E se algo der errado? Volte ao contêiner anterior sem dor!
Simples assim:
 host$ docker run ubuntu bash
 ubuntu$ apt-get install aquilo-e-isso
 host$ docker commit <conteiner_id> minhaimagem
 host$ docker run minhaimagem bash
 minhaimagem$ git clone git://..../meucódigo
 host$ docker commit <conteiner_id> minhaimagem
 host$ docker tag minhaimagem <usuário/minhaimagem>
 host$ docker push <usuário/minhaimagem>
Construir -> Entregar
Agilidade + Portabilidade + Controle
Conheça o Docker

Conheça o Docker

  • 1.
  • 2.
    Introdução ao Docker Como entregar software sem dor ?  Como garantir que o software que roda em desenvolvimento vai rodar em produção?  Como criar um ambiente em desenvolvimento que tenha a infraestrutura de produção sem ”duplicar” a estrutura e dobrar os custos?  Como garantir que as várias camadas e peças de software funcionem bem?  Como não colocar ”todos os ovos” em uma só cesta ?
  • 3.
    Introdução ao Docker O Docker funciona como um ”Contêiner” de software, capaz de encapsular tudo que o software precisa para rodar  Roda no Kernel existente  Isola o ambiente do contêiner do ambiente do Host  Possibilita criar uma arquitetura de micro-serviços  Muito fácil de criar contêineres  Os contêineres são executados de forma rápida e podem ser parados e reiniciados e trocados em segundos
  • 4.
  • 5.
    Introdução ao Docker Overhead de processamento é quase inexistente  Overhead de rede é mínimo  Contêineres são muito leves  Um laptop típico pode rodar 10-100 contêineres facilmente  Um servidor típico pode rodar de 100-1000 contêineres  O que roda local, irá rodar no servidor com o mesmo comportamento, independente da versão, da distribuição e das dependências de software
  • 6.
  • 7.
    Introdução ao Docker Um contêiner tem seu próprio espaço de processo (namespaces)  Um contêiner tem sua própria rede interna  Um contêiner pode rodar programas como ”root” sem problemas  Pode ter seu próprio /sbin /etc /etc/init sem afetar o host  Seu sistema de arquivos é incremental ”por camadas”. Isso permite um rollback fácil.  Docker CPU performance = performance nativa  Docker Memória = % pequeno diferente da memória do Host  Docker Rede = % pequeno de overhead
  • 8.
  • 9.
  • 10.
  • 11.
    Docker não éuma VM  Docker NÃO é uma VM leve  Docker aproveita o KERNEL do Host  Docker não precisa de SO Convidado  Docker isola o processo do Host  Docker permite que você execute um ambiente diferente do ambiente do Host  Docker permite que você tenha uma biblioteca com dependências e versões diferentes do Host  Docker pode rodar em uma VM  Docker pode rodar até em um Contêiner
  • 12.
  • 13.
    Como entregar softwarepara diferentes dispositivos ?
  • 14.
    O que cabeno contêiner?  Seu código fonte todo  Seus binários  Suas bibliotecas  Seu gerenciador de pacotes favorito (APT-GET, RPM, YUM, YAST, etc)  Seus aplicativos  Seus serviços de SGBD (Mysql, Oracle, Mongo, PostgreSQL, etc  Seus dados
  • 15.
    E fora docontêiner, fica o que?  Logging  Acesso remoto  Configuração de rede  Monitoramento
  • 16.
    E meus dados? Volumes permitem que um diretório específico exista dentro e fora do contêiner  Os contêineres podem compartilhar volumes em um mesmo Host  Um diretório pode persistir mesmo que um contêiner seja deletado  Volumes com dados podem ser criados em um Dockerfile ou CLI  Uma alteração no sistema de arquivos de um contêiner pode ser copiada para demais contêineres
  • 17.
  • 18.
    Tá, mas quala grande sacada?  Sim, você pode fazer tudo com VMs.  Sim, você pode automatizar com scripts  Mas a graaaaaaande questão é fazer tudo r-i-d-i-c-u-l-a-m-e-n-t-e fácil de usar  Você pode utilizar as imagens de outras pessoas (SIM, o Ecossistema)  Continua entrega / integração / teste / orquestração de software  Você pode criar e compartilhar imagens (todos da equipe rodam a mesma coisa)  Provê uma maneira simples, PADRÃO e que pode ser REPRODUZIDA com facilidade de entregar imagens
  • 19.
    Configuração Simples  Sim,funciona no LINUX  Sim, funciona no MAC  Sim, funciona no Windows  Sim, funciona em VMs  Altamente escalável  Instalação simples através de git  Provisionamento simples na AWS, Rackspace, Digital Ocean e Azure
  • 20.
    Componentes do Docker Docker Daemon = roda em background, gerencia os contêineres e imagens. Funciona através de uma API HTTP  Docker Contêiner = Unidade padrão que os aplicativos e serviços residem e são executados  Docker Imagem = A base de um contêiner.  Docker CLI = cliente que conversa com a API HTTP para processar as requisições  Docker Engine = Cria, entrega e roda os contêineres  Docker Registry = Repositório publico ou privado de imagens  Demais ferramentas de orquestração = ajudam na entrega e monitoramento de contêineres
  • 21.
    Fluxo de Trabalhodo Docker  Você trabalha com todos os componentes que precisa no desenvolvimento  Todos da equipe de desenvolvimento fazer código com o mesmo ambiente (compartilham as imagens)  Outros serviços necessários do código (RADIS, MEMCACHE, Banco) também rodam nos contêineres. Você testa como deve ser no servidor  Os contêineres podem ser criados em segundos e rodam instantaneamente
  • 22.
    Satisfeito com oresultado?  Se você ficar satisfeito com o resultado, pode enviar sua imagem para um repositório;  Pode rodar automaticamente o contêiner em CI/CD  Pode rodar em produção  Permite crescimento fácil com mais contêineres e Loadbalance FELICIDADE!!!  E se algo der errado? Volte ao contêiner anterior sem dor!
  • 23.
    Simples assim:  host$docker run ubuntu bash  ubuntu$ apt-get install aquilo-e-isso  host$ docker commit <conteiner_id> minhaimagem  host$ docker run minhaimagem bash  minhaimagem$ git clone git://..../meucódigo  host$ docker commit <conteiner_id> minhaimagem  host$ docker tag minhaimagem <usuário/minhaimagem>  host$ docker push <usuário/minhaimagem>
  • 24.
  • 25.