• Nenhum resultado encontrado

Docker: Uma visão geral e estudo de caso do DCC. Luis Felipe Cunha Martins PoP-MG/RNP - DCC/ICEX/UFMG

N/A
N/A
Protected

Academic year: 2021

Share "Docker: Uma visão geral e estudo de caso do DCC. Luis Felipe Cunha Martins PoP-MG/RNP - DCC/ICEX/UFMG"

Copied!
45
0
0

Texto

(1)

Docker: Uma visão geral

e estudo de caso do DCC

Luis Felipe Cunha Martins

(2)

As aplicações mudaram nos últimos tempos

~2000 ~2014

Ciclo de vida longo, sem modificações O desenvolvimento é iterativo e constante Monolítica e construída em uma única pilha

de softwares

Construída a partir de componentes acoplados livremente

(3)

Google Trends

Comparação com outros termos populares:

● Docker

● Big Data

(4)

Stack Overflow

Comparação com outros termos populares:

● Docker

● Big Data

(5)
(6)
(7)

Comunidade

● Um dos pontos mais fortes.

Centenas de grupos de meetups.

● Fóruns, grupos de facebook, twitter, github, youtube, slideshare,

etc…

● Crescimento de 30% na adoção no último ano. ● 30% dos containers estão rodando em produção.

(8)

História dos Containers

● FreeBSD Jails (2000).

● Oracle Solaris Zones (2004). ● LinuX Containers (LXC) - 2008.

● Google’s lmctfy (Let Me Contain That For You) - 2013.

(9)

O que são Containers

● Os containers são um método de virtualização em nível de S.O., que

permite executar uma aplicação e suas dependências em processos

com recursos isolados.

● Permite empacotar facilmente o código, as configurações e as

dependências da aplicação, oferecendo consistência de ambiente, eficiência operacional, produtividade e controle de versões.

● Os containers podem ajudar a garantir rapidez, confiabilidade e

consistência de implantação, independentemente do ambiente de homologação. Além disso, os containers oferecem um controle mais granular dos recursos, aumentando a eficiência da infraestrutura.

(10)

Containers leves (Lightweight containers)

● Os recipientes são isolados (ambiente totalmente segregado,

inclusive a rede - ip/rede própria ).

● Mas compartilham o kernel do S.O. e, onde apropriado, binários e

bibliotecas.

● ... o resultado é uma implantação

significativamente mais rápida, com muito menos sobrecarga (overhead), uma migração mais fácil e uma inicialização mais rápida.

(11)

O que é o Docker?

● Docker é uma tecnologia Open Source que permite criar, executar,

testar e implantar aplicações distribuídas dentro de containers.

● Permite que você empacote um software, contendo tudo que é

necessário para sua execução: código, runtime, ferramentas,

bibliotecas, etc.

● O Docker permite que você implante as aplicações rapidamente, de

modo confiável e estável, em qualquer ambiente.

● Versionamento e histórico de mudanças.

(12)
(13)

● Nós queremos entregar nosso software funcional para os diferentes

ambientes de forma simples e rápida.

● Mover do ambiente de desenvolvimento para produção é difícil: ○ Bibliotecas conflitantes / diferentes versões de softwares.

○ Diferentes S.O. ○ Diferentes versões de BD. Motivação Produção Teste de Integração Notebook do desenvolvedor ….. Desenvolvimento ?

(14)

Principais problemas a serem resolvidos

Na minha máquina funciona

● Criar, atualizar e manter toda a pilha de

softwares é difícil:

○ O projeto usualmente contém muitas

libs, bd’s, serviços, …

○ Difícil de manter uma versão do projeto

reproduzível.

● Teste / Integração contínua / Entrega

(15)

Como resolver isso (DIY)

● Faça você mesmo:

1. Copiar / instalar dependências (manualmente); 2. Preparar o banco de dados;

3. Instalar a versão mais recente do projeto; 4. Configurar o ambiente;

5. Testar o projeto;

6. Detectar os erros (na minha máquina funciona); 7. Consertar os erros;

8. Repetir os testes (até funcionar);

(16)

Como resolver isso (VMs)

● Empacotar tudo em uma VM e executar o deploy em ambientes

diferentes.

● Desvantagens:

○ Pesada ⇒ quantas VMs você pode rodar em sua máquina?

○ Consumo alto de recursos ⇒ Virtualização completa (OS, I/O, …). ○ Tamanho (GBs para cada VM).

○ Problema com portabilidade ⇒ Diferentes soluções de virtualização.

○ Gerenciamento: Difícil de manter/configurar/reusar diferentes versões de

cada VM.

(17)

Como resolver isso (Docker)

(18)

Benefícios do Docker

Entrega consistente e rápida das aplicações:

● Os containers abstraem as diferenças entre cada máquina física e são excelentes para integração e desenvolvimento contínuo (CI/CD).

Considere o seguinte cenário:

● Os desenvolvedores escrevem o código localmente e compartilham o seu trabalho com os colegas usando containers Docker;

● Ele usam docker para subir a aplicação no ambiente de testes e executar testes manuais e automáticos;

● Quando encontram bugs, eles consertam eles no ambiente de desenvolvimento e re-executam os testes e validação (subindo os containers novamente);

● Quando os testes são finalizados, aplicar a correção para o usuário é simples como subir a imagem atualizada no ambiente de produção.

(19)

Benefícios do Docker

Implementação e dimensionamento responsivos:

● A plataforma do docker permite cargas de trabalho altamente portáveis. Os containers podem ser executados em qualquer local, como o laptop do desenvolvedor, máquinas físicas ou virtuais em um DC, provedores de nuvem ou ambientes heterogêneos.

● A portabilidade Docker e sua natureza leve também torna-o fácil de gerenciar cargas de trabalho dinamicamente, escalando ou reduzindo aplicações e serviços conforme a necessidades do negócio, em tempo quase real.

Compatibilidade e manutenabilidade:

● Elimina o problema de “na minha máquina funciona”, de uma vez por todas. Sua imagem executa da mesma forma, não importando o servidor ou laptop em que estão executando. Para os desenvolvedores isso significa menos tempo gasto na configuração do ambiente e em depurar problemas específicos do ambiente, resultando em um ambiente de produção mais confiável e fácil de manter.

(20)

Benefícios do Docker

Melhor aproveitamento de recursos:

● Docker é leve e rápido. Dessa forma provê uma alternativa viável, de baixo

custo à virtualização baseada em hypervisors (VM), permitindo usar mais da capacidade da máquina para alcançar os objetivos do negócio.

● Docker é perfeito para ambientes de alta densidade e para implementações

(21)

Benefícios do Docker

Plataformas multi-cloud:

● Um dos grandes benefícios do Docker é a sua portabilidade. Nos últimos anos, todos os grandes players de computação em nuvem (AWS, GCP, …), ‘abraçaram’ o Docker e disponibilizaram suporte individual a ele.

● Os containers podem ser executados no RackSpace, AWS, GCP, VirtualBox, e em qualquer outro local onde o S.O. hospedeiro suporte o docker.

Segurança:

● Do ponto de vista de segurança, Docker garante que as aplicações estejam executando em containers completamente segregados e isolados entre si, garantindo completo controle sobre o fluxo de dados e gerência. Nenhum container pode acessar os processo executando em outro container.

● De um ponto de vista arquitetural, cada container possui seu próprio conjunto de recursos, desde o processamento até a pilha de rede.

(22)

Benefícios do Docker

Isolamento:

● Cada container tem seus próprios recursos que são isolados de outros

containers.

● Docker permite que você remova sua aplicação de forma limpa, uma vez que

elas só executam dentro do container. Se você não precisa mais dela, basta deletar o container, sem deixar arquivos temporários ou de configuração no S.O. do hospedeiro.

● Além disso, é possível que cada aplicação utilize apenas os recursos

associados para ela. Uma aplicação não irá usar todos os recursos disponíveis, o que tornaria o sistema lento, degradando o desempenho ou deixando as demais aplicações fora do ‘ar’.

(23)

Benefícios do Docker

E muitos outros:

● Retorno do investimento e redução de custos. ● Versionamento.

(24)

Docker - Arquitetura

Docker usa uma arquitetura cliente-servidor. A parte cliente fala com o Docker daemon, que faz o trabalho pesado de construção, execução e distribuição de seus containers e imagens Docker e controla os recursos em execução. O cliente e servidor podem ser executados no mesmo sistema, ou o cliente pode se conectar em um daemon remoto.

Essa comunicação se dá através de um API REST, através de sockets UNIX ou uma interface de rede, para execuções de comandos e scripts.

(25)

Principais partes do Docker

Images

● Containers

(26)

Principais partes do Docker

● Images

Containers

● Dockerfile

Containers docker: Containers tem como base

sempre uma imagem. Uma analogia de Java é “A

imagem é uma classe e um container é como um objeto instância dessa classe”.

Através de uma imagem você pode instanciar vários containers e definir limitações de uso de recursos e isolamento parcial ou total dos mesmos (usando chroot, cgroups, ...).

Características: Portabilidade, isolamento de processos, prevenção de violação externa, gerenciamento de consumo de recursos.

(27)

Principais partes do Docker

● Images

● Containers

Dockerfile

Docker pode construir imagens automaticamente lendo as instruções do arquivo Dockerfile.

Dockerfile é um arquivo de texto que contém todos os comandos necessários para se criar uma imagem, que é construída através do comando “docker build”.

Formato # Comentario

Instruções argumentos

O docker executa as instruções em ordem. A primeira deve ser sempre um “FROM” para especificar a imagem Base da qual você está construindo

# Meu container FROM ubuntu:trusty … … ...

(28)

Dockerfiles: Instruções ● FROM ● RUN ● ADD/COPY ● EXPOSE ● ENV ● VOLUME ● CMD / ENTRYPOINT

(29)

Vamos ver como isso funciona?

(30)

Caso de uso do CRC/DCC/UFMG

Serviço de páginas WEB do DCC

EVENTOS PROJETOS DISCIPLINAS LABORATORIOS … … …

(31)

Estrutura antiga

65 virtual hosts sendo executados no mesmo servidor WEB: ○ Servidor: Apache22 + PHP;

○ Dados: Externo, montado via NFS; ○ Mesma instância do Apache;

○ Mesmo usuário/grupo (www-data/www-data) executando cada vhost (de

usuários diferentes e não relacionados);

○ Administradores do vhost (diversos usuários) precisam ter acesso de

(32)

Estrutura antiga - Problemas

● Problemas:

○ Arquivos precisam ter leitura para o usuário do apache (www-data): ■ Senhas e outros dados sensíveis ficam vulneráveis;

■ Incluir o www-data como membro de todos os grupos. ○ Especificidades de cada ambiente não podem ser atendidas.

○ Ataques (vulnerabilidades) a um site específico derrubam todo o sistema. ○ Atualizações difíceis de serem planejadas e executadas.

○ Permitir a utilização de recursos de forma diferenciada por cada vhost

(de acordo com a necessidade individual).

○ Toda a raiz do diretório de dados remoto precisa ser montada na

(33)

● Problemas:

○ Arquivos precisam ter leitura para o usuário do apache (www-data):

■ Apache executando como o próprio usuário e grupo do projeto

■ Retirar permissão de “outros” de todos os arquivos;

○ Especificidades de cada ambiente não podem ser atendidas.

○ Ataques (vulnerabilidades) a um site específico derrubam todo o

sistema:

■ Ambiente isolado para cada usuário;

(34)

● Problemas:

○ Atualizações difíceis de serem planejadas e executadas:

■ Ambiente de produção = Ambiente de desenvolvimento (migração

transparente).

○ Permitir a utilização de recursos de forma diferenciada por cada vhost:

■ Gerenciamento de recursos.

○ Toda a raiz do diretório de dados remoto precisa ser montada na

servidora:

■ Acesso apenas ao diretório do site (vhost).

(35)

Solução - Docker !!!

● Imagem padronizada para o servidor WEB (apache+php+sssd+...). ● Cada vhost é mapeado em um container próprio.

● Cada container mapeia apenas o diretório remoto (nfs) de seus

arquivos.

● Todos os containers (vhosts) utilizam a mesma imagem padrão

(+/- 15MB de memória por container).

● Parâmetros repassados durante a execução do container alteram os

arquivos de conf da imagem padrão para a especificidade de cada vhost.

(36)

Solução - Docker !!!

● Os containers são criados com recursos (cpu e memória) limitados. ● Cada container roda um processo do apache executado pelo usuário

e grupo dos arquivos do vhost em questão.

● Possibilidade de customizar o container de cada vhost.

● Possibilidade de versionamento do container, com rollback e diff

entre versões.

● Auto documentado.

● Executa em qualquer infra-estrutura e ambiente.

● Puppet (orquestrador) gerencia a execução dos containers e garante

(37)
(38)

Dockerfile: www2-docker FROM ubuntu:trusty

MAINTAINER Luis Martins (luisf@crc.dcc.ufmg.br) # APT não interativo

ENV DEBIAN_FRONTEND noninteractive EXPOSE 80

RUN apt-get update && apt-get install -yqq \ msmtp \ sssd-ldap \ apache2 \ php5 \ ... # COPY APACHE

ADD data/apache2 /etc/apache2 #COPY data/php5 /etc/php5 ADD data/php5 /etc/php5 #COPY data/certs/ /etc/php5 ADD data/certs /etc/ssl/certs

COPY data/sssd.conf /etc/sssd/sssd.conf RUN mkdir -p /opt

COPY data/startup.sh /opt/startup.sh RUN chmod 775 /opt/startup.sh

VOLUME ["/var/lib/sss"] CMD ["/opt/startup.sh"]

(39)

Dockerfile: entrypoint

#!/bin/bash

CONF_DIR="/etc/apache2" SITES="sites-enabled"

VHOSTDEFAULT="www.vhost.dcc.ufmg.br.conf"

echo "Inicializacao do Container"

if [ -f "/etc/apache2/.first_run_wwwdcc" ]; then exec /usr/sbin/apache2ctl -D FOREGROUND exit 0 fi sed -i -e "/APACHE_RUN_USER/s/www-data/$APACHE_USER/g" \ -e "/APACHE_RUN_GROUP/s/www-data/$APACHE_GROUP/g"\ $CONF_DIR/envvars sed -i -e "/ServerAdmin/s/admin/$APACHE_USER/g" \ -e "/ServerAlias/s/vhost/$vhost/g" \ -e "/ServerName/s/vhost/$vhost/g" \ -e "/DocumentRoot/s/dir/${WEB_DIR//\//\\/}/g" \ -e "/ErrorLog/s/vhost/$vhost/" \ -e "/CustomLog/s/vhost/$vhost/" \ -e "/Directory/s/dir/${WEB_DIR//\//\\/}/g" \ $CONF_DIR/$SITES/$VHOSTDEFAULT … … if ! [ -z ${append} ]; then echo "Append is set";

echo "append is set" >> /root/append; sed -i "/<EXTRA>/c$append" \

$CONF_DIR/$SITES/$VHOSTDEFAULT; fi

mv $CONF_DIR/$SITES/$VHOSTDEFAULT $CONF_DIR/$SITES/$vhostconf

touch /etc/apache2/.first_run_wwwdcc

echo "Bind no processo do APACHE" exec /usr/sbin/apache2ctl -D FOREGROUND

(40)

Exemplo de execução de um container

● Laboratório labx :

● Mas são 65 containers. Criar todos manualmente e garantir que todos

estejam executando é inviável

NÃO ESCALA

docker run -v /www/laboratorios/labx:/www/laboratorios/labx \

-p 80:80 --rm --name labx --env WEB_DIR=/www/laboratorios/labsoft \

--env APACHE_USER=lucas.sg --env APACHE_GROUP=labsoft \

--env vhostconf=www.labsoft.dcc.ufmg.br.conf --env vhost=labsoft \

(41)

Escalabilidade e monitoramento

● PUPPET !!!

○ O puppet deverá gerenciar toda a criação dos containers, além de

checar se os containers estão em execução, reiniciando-os caso necessário.

○ Escalabilidade.

○ Configuração centralizada.

(42)

Benefícios

● Cada usuário possui seu próprio espaço WEB, que pode ser

customizável e versionado.

● O servidor WEB executa com o próprio usuário e, em uma falha que

explore as permissões de acesso, apenas os dados desse projeto estariam ameaçados:

○ Como o serviço é executado como o usuário, os dados de múltiplos

usuários não estão visíveis um para os outros.

● As vulnerabilidades de um site, que possa gerar uma sobrecarga no

(43)

Benefícios

● Excelente utilização dos recursos da máquina hospedeira. Todos os

containers juntos ocupam 1GB de espaço apenas (800MB da imagem + 209MB de todos os discos dos containers) !!!

● Cada container ocupa entre 15 MB e 250 MB de memória, sendo

(44)

Conclusão

● (Acredito) que o Docker veio para ficar, e que não é por acaso que os

grandes provedores de cloud computing estão investindo em tornar deploys de aplicações em containers Docker cada vez mais fáceis e rápidos.

● A comunidade só tem a se beneficiar com todos os repositórios

públicos que vem surgindo a cada dia, e desenvolvedores e

sysadmins, poderão desfrutar de maior produtividade por terem mais controle e estabilidade em seus ambientes de execução.

● O uso do Docker no DCC levou a um sistema mais seguro, leve,

(45)

OBRIGADO !

Luis Martins

Referências

Documentos relacionados

Ficou com a impressão de estar na presença de um compositor ( Clique aqui para introduzir texto. ), de um guitarrista ( Clique aqui para introduzir texto. ), de um director

O presente relatório de estágio foi realizado no âmbito da “Dissertação”, inserida no plano curricular do Mestrado Integrado em Engenharia Civil. O relatório agora

The challenges of aging societies and the need to create strong and effective bonds of solidarity between generations lead us to develop an intergenerational

O relatório encontra-se dividido em 4 secções: a introdução, onde são explicitados os objetivos gerais; o corpo de trabalho, que consiste numa descrição sumária das

Os principais resultados obtidos pelo modelo numérico foram que a implementação da metodologia baseada no risco (Cenário C) resultou numa descida média por disjuntor, de 38% no

Pensar a formação continuada como uma das possibilidades de desenvolvimento profissional e pessoal é refletir também sobre a diversidade encontrada diante

Os arquivos de escritório, tais como documentos, planilhas, apresentações de slides deverão utilizar o formato ODF, cujas extensões são .odt para documentos,

responsabilidade da referida comunidade e deverão estar devidamente uniformizados com calçado (chuteira ou tênis), CAMISA, SHORT, MEIAO OU MEIA, obrigatoriamente