Docker e Produtos Interlegis
Docker e Produtos Interlegis
twitter.com/fabiorauber
github.com/fabiorauber
Fábio Kaiser RauberAnalista de Informática Legislativa
Meu trabalho
● SysAdmin no Interlegis desde 2009● Automação de Infraestrutura
– Scripts (Shell, Python)– Puppet (Community, Foreman)
– Docker (Rancher)– Gitlab CI
– CoreOS Container Linux
Hospedagem Interlegis
● Os Produtos são instalados e mantidos pela equipe do Interlegis em equipamentos do Programa em Brasília
● Necessária apenas conexão à Internet● É necessário apenas saber usar a ferramenta● Cursos são oferecidos através de Oficinas Interlegis nos
Estados ou mesmo através de EAD
Hospedagem Interlegis
● Portal Modelo– 1750 Casas Legislativas atendidas
● Sistema de Apoio ao Processo Legislativo– 1015 Casas Legislativas
● Correio Corporativo: – 105 Casas Legislativas
● Domínios .LEG.BR Hospedados: – Cerca de 1800 Domínios .LEG.BR
Hospedagem Interlegis
Introdução ao Docker
O que são containers?
● „Um container é um ambiente de execução autocontido que compartilha o kernel do sistema operacional hospedeiro e que é (opcionalmente) isolado de outros containers no sistema“ -- Projeto Libcontainer
● Não há emulação de hardware, não há sistema de init, não há um segundo kernel/serviços de sistema
● Apenas é possível rodar executáveis compatíveis com o kernel do hospedeiro– Arquitetura: x86, AMD64, ARM...– SO: Linux, Windows (Docker EE)
Containers
● Não é uma tecnologia nova, containers existem há cerca de 30 anos– 1979 - Unix 7 chroot
● Restringe a visão do processo sobre o sistema de arquivos
– 2000 - FreeBSD Jails: 2000● Expandiu as funcionalidades
– 2004 - Solaris Containers (Zones)● Primeira implementação comercial grande
– 2007 - HP Resource Partitions e HP UX Containers
– 2008 - Linux Containers (LXC) – Kernel 2.6.24– 2013 - Docker
Containers
● Aplicações para a Internet precisam de larga escala, e precisam ser distribuídas em vários Data Centers – Google
● Microserviços– Aplicações como um conjunto de serviços fracamente
acoplados– Serviços devem ser granulares (pequenos)
– Protocolos de comunicação devem ser leves– Aumenta a modularidade (reúso)
Containers
● O que o Docker fez foi juntar containers Linux a:– Sistema de arquivos em camadas (Layered)
– Filosofia:● uma aplicação (processo) por container● containers são efêmeros (sem estado)
– Repositório de imagens
– Gerência automática de rede: DNS, DHCP, IPTables...
– Gerência de volumes– Gerência de Logs
– Plugins
Um processo por container?
● Cada container deve servir para uma coisa apenas– Permite que eles sejam reutilizados e escalonados
● Só um processo mesmo? – Não necessariamente, mas é uma boa prática.
– Rodar o mínimo necessário, utilizando a menor imagem possível
● Ex: Instalação de Wordpress– Container de Aplicação (Apache + PHP + Wordpress)
– Container de Banco de Dados (MySQL)
Containers não tem estado
● O container não deve manter estado (é efêmero), para poder ser destruído e reconstruído quando necessário
● Detalhes de configuração devem ser passados por variáveis de ambiente. – Assim, é possível reutilizar um container em vários cenários
● E for uma aplicação essencialmente com estado?– O estado será externalizado através de volumes do Docker
– Apenas o mínimo necessário deve estar em um volume
Rede dos Containers
● Rede definida por software (SDN)– Containers em um hospedeiro se comportam como hosts em uma
rede privada
– O hospedeiro funciona como bridge entre os containers e a rede externa
– Cada container tem sua interface de rede conectada à Docker bridge
– É possível criar mais de uma rede para os containers
– O Docker permite mapear portas dos containers para o hospedeiro, permitindo acesso externo ao container
Comunicação Inter-containers
● Containers na mesma rede se comunicam diretamente● Servidor DNS embutido
– O daemon do Docker provê resolução de nomes DNS entre os containers conectados na mesma rede
– Se o servidor DNS interno não conseguir resolver algum nome, ele encaminhará a requisição para o DNS externo configurado no /etc/resolv.conf da máquina hospedeira
– Se não houverem servidores válidos no /etc/resolv.conf, o Docker utilizará o Google Public DNS (8.8.8.8 e 8.8.4.4)
Rede dos Containers
Instalando o Docker
● O Docker (Community) é suportado nos seguintes sistemas Operacionais– Linux (64 bits)– Windows (64 bits, Desktop apenas)
– MacOS (64 bits, Desktop apenas)
Docker no Linux
● É fortemente recomendado que você rode o Docker em sua distribuição Linux (64 bits) preferida– Ubuntu (14.04 LTS, 16.04 LTS, 17.04)– Debian (Stretch, Jessie, Wheezy)
– CentOS
– Fedora (24, 25)
● Script de conveniência:– curl -ssl https://get.docker.com | sh
Docker no Windows e Mac
● O Docker no Windows e no Mac roda através de uma VM Linux bastante leve, o boot2docker.– Windows: Hyper-V– Mac: Virtualbox
● Há ferramentas de gerência gráficas● Recomendado para desenvolvedores e pessoas que
queiram testar o docker
CoreOS Container Linux
CoreOS: O que é?
● Distribuição mínima do Linux feita sob medida para rodar containers docker
● Provê atualizações automáticas e confiáveis em todas as máquinas, facilitando o trabalho do SysAdmin
● Feito para rodar tudo em containers, permitindo escalar serviços e trocar servidores com problemas facilmente
CoreOS: como funciona?
● O CoreOS não tem gerenciador de pacotes, tudo deve ser instalado e gerenciado através de containers
● Possui apenas binários básicos de sistema (systemd, vi, bash, ssh, update-engine) e de containers (docker e rkt)
● Por isso, funciona com pouquíssima RAM
CoreOS: como funciona?
● Utiliza um esquema de partições ativo/passivo, permitindo que o sistema todo seja atualizado de uma vez, em vez de fazê-lo pacote a pacote
Atualização do CoreOS
● O CoreOS possui 3 canais principais de atualização:– Alpha:
● Contém as últimas modificações desenvolvidas, disponibilizando bibiliotecas do sistema com versões novas para serem testadas
– Beta:● Consiste de versões promovidas do canal Alpha.
– Stable: ● Deve ser utilizado para produção. As versões do Container Linux são
testadas primeiro com os canais Alpha e Beta antes de serem promovidas
Atualizações automáticas
● O CoreOS habilita atualizações automáticas por padrão● Um reboot deve ser agendado para aplicar a atualização● Estratégias de reboot:
– best-effort: padrão, checa se a máquina é parte de um cluster etcd e, se for, reinicia desde que nenhuma outra esteja reiniciando no momento. Se não estiver em cluster, reboot
– reboot: reinicia imediatamente
– off: reboot manual
● Um reboot pode ser agendado através do systemd
Docker-compose
Docker-compose
● Uma solução é composta de vários containers, normalmente interconectados em com muitas propriedades a serem configuradas
● Usar o cliente do docker para tudo não é prático● O docker-compose é uma ferramenta pra definir e rodar
aplicações multi-container● Um arquivo docker-compose.yaml define os containers e
suas interconexões/propriedades
Docker-compose
● Além disso, o docker-compose simplifica várias tarefas que precisariam de mais de um comando do docker para serem completadas
● docker-compose up --buildversion: '3'services: web: build: . ports: - "5000:5000" volumes: - logvolume:/var/log links: - redis redis: image: redisvolumes: logvolume: {}
Docker-compose
● O docker-compose utiliza a API do Docker para criar o ambiente definido pelo seu arquivo YAML
● Permite rodar vários ambientes isolados em um mesmo host. Cada arquivo docker-compose.yaml é um projeto
● Ele preserva os volumes dos containers definidos no docker-compose, mesmo que os próprios sejam destruídos
● Recria containers cuja configuração mudou● Suporta substituição de variáveis
Instalando o docker-compose
● Cheque a última versão do docker-compose no seu repositório do GitHub– https://github.com/docker/compose/releases
● Copie e cole o comando de instalação do binário do docker-compose (como root)– curl -L
https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
– chmod +x /usr/local/bin/docker-compose
Instalando o docker-compose
● Instale o docker-compose via pacote Python:
– pip install docker-compose● Instale um container do docker-compose
– Recomendado para CoreOS Container Linux– sudo curl -L --fail
https://github.com/docker/compose/releases/download/1.16.1/run.sh -o /usr/local/bin/docker-compose
– sudo chmod +x /usr/local/bin/docker-compose
Docker e Produtos Interlegis
Portal Modelo com Docker
1)Instale o Docker (ou use o Container Linux)
2)Instale o Docker-compose
3)Baixe o arquivo docker-compose– https://raw.githubusercontent.com/interlegis/interlegis.portalmod
elo.docker/master/docker-compose.yml
4)docker-compose up -d
Portal Modelo com Docker
version: "2"services: plone: image: interlegis/portalmodelo:3.0-5 restart: always environment: ZEO_ADDRESS: zeoserver:8100 ZEO_SHARED_BLOB_DIR: 'on' ports: - 8080:8080 depends_on: - zeoserver volumes: - data:/data
Portal Modelo com Docker
zeoserver: image: interlegis/portalmodelo:3.0-5 restart: always command: zeoserver environment: ZEO_SHARED_BLOB_DIR: 'on' volumes: - data:/data
volumes: data: driver: local
Demonstração: PM 3.0
SAPL 3.1 com Docker
1)Instale o Docker (ou use o Container Linux)
2)Instale o Docker-compose
3)Baixe o arquivo docker-compose– https://raw.githubusercontent.com/interlegis/sapl/master/docker-
compose.yml
4)docker-compose up -d
SAPL 3.1 com Docker
sapl: image: interlegis/sapl:3.1.32-BETA restart: always environment: ADMIN_PASSWORD: interlegis ADMIN_EMAIL: [email protected] DEBUG: 'False' USE_TLS: 'False' EMAIL_PORT: 587 EMAIL_HOST: smtp.dominio.net EMAIL_HOST_USER: usuariosmtp EMAIL_HOST_PASSWORD: senhasmtp volumes: - sapl_data:/var/interlegis/sapl/data - sapl_media:/var/interlegis/sapl/media links: - sapldb ports: - "80:80"
SAPL 3.1 com Docker
sapldb: image: postgres restart: always environment: POSTGRES_PASSWORD: sapl POSTGRES_USER: sapl POSTGRES_DB: sapl PGDATA : /var/lib/postgresql/data/ volumes: - sapldb_data:/var/lib/postgresql/data/ ports: - "5432:5432"
Demonstração: SAPL 3.1
Dúvidas / Perguntas?
Fábio Kaiser RauberServiço de Infraestrutura Tecnoló[email protected]