Conheça o Docker

Preview:

Citation preview

Conheça o DockerProf. 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