docker e produtos interlegis · cada arquivo docker-compose.yaml é um projeto ele preserva os...

41
Docker e Produtos Interlegis

Upload: others

Post on 22-May-2020

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Docker e Produtos Interlegis · 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

Docker e Produtos Interlegis

Page 2: Docker e Produtos Interlegis · 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

Docker e Produtos Interlegis

twitter.com/fabiorauber

github.com/fabiorauber

[email protected]

Fábio Kaiser RauberAnalista de Informática Legislativa

Page 3: Docker e Produtos Interlegis · 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

Meu trabalho

● SysAdmin no Interlegis desde 2009● Automação de Infraestrutura

– Scripts (Shell, Python)– Puppet (Community, Foreman)

– Docker (Rancher)– Gitlab CI

– CoreOS Container Linux

Page 4: Docker e Produtos Interlegis · 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

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

Page 5: Docker e Produtos Interlegis · 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

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

Page 6: Docker e Produtos Interlegis · 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

Hospedagem Interlegis

Page 7: Docker e Produtos Interlegis · 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

Introdução ao Docker

Page 8: Docker e Produtos Interlegis · 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

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)

Page 9: Docker e Produtos Interlegis · 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

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

Page 10: Docker e Produtos Interlegis · 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

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)

Page 11: Docker e Produtos Interlegis · 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

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

Page 12: Docker e Produtos Interlegis · 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

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)

Page 13: Docker e Produtos Interlegis · 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

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

Page 14: Docker e Produtos Interlegis · 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

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

Page 15: Docker e Produtos Interlegis · 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

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)

Page 16: Docker e Produtos Interlegis · 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

Rede dos Containers

Page 17: Docker e Produtos Interlegis · 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

Instalando o Docker

● O Docker (Community) é suportado nos seguintes sistemas Operacionais– Linux (64 bits)– Windows (64 bits, Desktop apenas)

– MacOS (64 bits, Desktop apenas)

Page 18: Docker e Produtos Interlegis · 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

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

Page 19: Docker e Produtos Interlegis · 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

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

Page 20: Docker e Produtos Interlegis · 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

CoreOS Container Linux

Page 21: Docker e Produtos Interlegis · 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

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

Page 22: Docker e Produtos Interlegis · 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

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

Page 23: Docker e Produtos Interlegis · 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

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

Page 24: Docker e Produtos Interlegis · 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

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

Page 25: Docker e Produtos Interlegis · 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

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

Page 26: Docker e Produtos Interlegis · 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

Docker-compose

Page 27: Docker e Produtos Interlegis · 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

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

Page 28: Docker e Produtos Interlegis · 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

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: {}

Page 29: Docker e Produtos Interlegis · 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

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

Page 30: Docker e Produtos Interlegis · 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

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

Page 31: Docker e Produtos Interlegis · 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

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

Page 32: Docker e Produtos Interlegis · 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

Docker e Produtos Interlegis

Page 33: Docker e Produtos Interlegis · 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

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

Page 34: Docker e Produtos Interlegis · 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

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

Page 35: Docker e Produtos Interlegis · 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

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

Page 36: Docker e Produtos Interlegis · 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

Demonstração: PM 3.0

Page 37: Docker e Produtos Interlegis · 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

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

Page 38: Docker e Produtos Interlegis · 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

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"

Page 39: Docker e Produtos Interlegis · 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

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"

Page 40: Docker e Produtos Interlegis · 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

Demonstração: SAPL 3.1

Page 41: Docker e Produtos Interlegis · 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

Dúvidas / Perguntas?

Fábio Kaiser RauberServiço de Infraestrutura Tecnoló[email protected]