Escolar Documentos
Profissional Documentos
Cultura Documentos
~2000 ~2014
● Docker
● Big Data
● Micro Services
Stack Overflow
● Docker
● Big Data
● Micro Services
Quem está usando
É muitas outras empresas e projetos
Comunidade
Teste de Integração
Desenvolvimento ?
Notebook do desenvolvedor
…..
Principais problemas a serem resolvidos
● 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.
■ Geralmente resolvidos com Vagrant, Chef, Puppet, ...
Como resolver isso (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.
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’.
Benefícios do Docker
E muitos outros:
● Retorno do investimento e redução de custos.
● Versionamento.
● Images
● Containers
● Dockerfile
Principais partes do Docker
Formato
# Comentario
Instruções argumentos
# Meu container
FROM ubuntu:trusty
… … ...
Dockerfiles: Instruções
● FROM
● RUN
● ADD/COPY
● EXPOSE
● ENV
● VOLUME
● CMD / ENTRYPOINT
Vamos ver como isso funciona?
Linus Torvalds
Caso de uso do CRC/DCC/UFMG
EVENTOS
PROJETOS
DISCIPLINAS
LABORATORIOS
………
Estrutura antiga
● 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
servidora.
Como resolver?
● 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;
Como resolver?
● 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.
CMD ["/opt/startup.sh"]
Dockerfile: entrypoint
#!/bin/bash …
…
CONF_DIR="/etc/apache2"
SITES="sites-enabled"
VHOSTDEFAULT="www.vhost.dcc.ufmg.br.conf" if ! [ -z ${append} ]; then
echo "Append is set";
echo "Inicializacao do Container" echo "append is set" >> /root/append;
sed -i "/<EXTRA>/c$append" \
if [ -f "/etc/apache2/.first_run_wwwdcc" ]; then $CONF_DIR/$SITES/$VHOSTDEFAULT;
exec /usr/sbin/apache2ctl -D FOREGROUND fi
exit 0
fi mv $CONF_DIR/$SITES/$VHOSTDEFAULT $CONF_DIR/$SITES/$vhostconf
sed -i -e "/APACHE_RUN_USER/s/www-data/$APACHE_USER/g" \
-e "/APACHE_RUN_GROUP/s/www-data/$APACHE_GROUP/g"\ touch /etc/apache2/.first_run_wwwdcc
$CONF_DIR/envvars
echo "Bind no processo do APACHE"
sed -i -e "/ServerAdmin/s/admin/$APACHE_USER/g" \ exec /usr/sbin/apache2ctl -D FOREGROUND
-e "/ServerAlias/s/vhost/$vhost/g" \
-e "/ServerName/s/vhost/$vhost/g" \ exit 0
-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
Exemplo de execução de um container
● Laboratório labx :
● 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.
○ Fácil manutenção e modificação.
Benefícios
● Cada usuário possui seu próprio espaço WEB, que pode ser
customizável e versionado.
● (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.