conheça o docker
TRANSCRIPT
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