Sunteți pe pagina 1din 26

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

S-ar putea să vă placă și