Uelton Cardeal Pimenta Filho Kleber Yuji Inoue Gustavo ...
Transcript of Uelton Cardeal Pimenta Filho Kleber Yuji Inoue Gustavo ...
Docker e sua Relação com Microsserviços
Gabriel Angelo Sgarbi CocenzaGabriel Muniz MorãoGustavo Pedralino de OliveiraKleber Yuji InoueUelton Cardeal Pimenta Filho
Agenda
2
● O que é Docker e seus principais conceitos;● Evolução histórica e a empresa Docker;● Utilização e dados estatísticos;● Instalação, dockerfile e principais comandos;● Docker Compose;● Docker Hub: suas funcionalidades e comandos;● Osquestração de Containers, Kubernetes e Docker Swarm;● Exemplo e live coding com Docker.
Agrupamento de uma aplicação junto com suas dependências que compartilham o kernel do S.O do host, ou seja, da máquina virtual ou física onde está rodando a aplicação.
Seu objetivo é dar independência de execução à diversos processos e aplicações, a fim de otimizar a utilização da infraestrutura de recursos promovendo a mesma segurança de sistemas separados.
Container
3
Projeto open source de plataforma as a service (PaaS), com a proposta de desenvolver, entregar e executar projetos em pacotes de software.
Esses pacotes são containers isolados que agrupam seus próprios softwares, bibliotecas e arquivos.
Solução flexível, portátil e escalável para desenvolvimento de aplicações.
Docker
4
Evolução
6
2005
OpenVz
Ferramenta para gerenciamento de container que ajudou na popularização do VPS (Virtual Private Server) e, consequentemente na criação de centenas de empresas de hosting
2008
LXC (Google + Virtuozzo + IBM)Solução estável para criação e gerenciamento de containers que trazia consigo o CGroups, namespaces e chroot.
2000
FreeBSD jails
isolamento do filesystem + isolamento processos
2013
Docker
1979
chroot
introduzido em 1979 na versão 7 Unix em 1979 foi feito para isolar o filesystem
Docker Inc.
7
● Começou em 2010 quando Solomon Hykes fundou a dotCloud especializada em PaaS (Plataform as a Service) com o diferencial de não ser atrelado a nenhuma linguagem de programação específica. Heroku por exemplo suportava somente apps em Ruby;
● Em 2013 tornou open-source o core da plataforma - assim nasceu o Docker;
● 6 meses > 6 mil stars GitHub > 170 desenvolvedores pelo mundo;
● Antes da versão 1.0 para produção, Spotify já usava em grande escala;
● AWS e GCP começaram a oferecer suporte na nuvem;
● Tornou-se um unicórnio em 2015.
Histórico Utilização Docker
8
MicrosoftMicrosoft anuncia segunda versão do WSL (Windows Subsystem for Linux ). Portanto, Docker passa a funcionar para Windows 10 Home, Pro e Enterprise
2019
LinkedinUma análise no Linkedin demonstrou que a utilização do docker cresceu 160%
2017
Principais Parceiros Cisco, Google, Huawei, IBM, Microsoft, and Red Hat
2016
IBM / AWSParceria estratégica com o Docker para melhor integração com IBM Cloud. Serviço de Docker anunciado na AWS para a EC2
2014
Red HatColobaração para Fedora, Red Hat Enterpise Linux (RHEL) e OpenShift
2013
Instalação Docker
13 Fonte
Pré-requisitos:
● Máquinas 64 bits
● Estável para kernel >= 3.8 (Ubuntu 20 - Kernel 5.4)
● kernel com suporte aos sistemas de arquivos, como o AUFS, Device Mapper etc.
● Suporte a cgroups e namespaces que vem habilitado por default na maioria das distros.
dockerfile
14
➔ ADD - Copia novos arquivos, diretórios, arquivos TAR ou arquivos remotos e adiciona ao filesystem do container.
➔ CMD - Executa um comando. Diferentemente do RUN, que executa o comando quando está “buildando”, a imagem, o CMD irá fazê-lo somente quando o container for iniciado.
➔ LABEL - Adiciona metadados à imagem, como versão, descrição e fabricante➔ COPY - Copia novos arquivos e diretórios e os adiciona ao filesystem do container➔ ENTRYPOINT - Permite configurar um container para rodar um executável. Quando
finaliza o executável, o container também será.➔ ENV - Informa variáveis de ambiente ao container.➔ EXPOSE - Informa qual porta o container está ouvindo➔ FROM - Indica qual imagem será utilizada como base. Primeira linha do dockerfile➔ MAINTAINER - Autor da imagem➔ RUN - Executa qualquer comando em uma nova camada no topo da imagem e
“comita” as alterações.➔ USER - especifica o usuário que será utilizado na imagem. Por padrão é root➔ VOLUME - Permite criação de um ponto de montagem no container.➔ WORKDIR - Responsável por mudar do diretório raiz para o específico nele
dockerfile
16
FROM alpine:3.10
COPY requirements.txt /
RUN apk add --no-cache python3 python3-dev libev libev-dev tzdata \
&& pip3 install --upgrade pip
RUN apk add --no-cache --virtual build-dependencies \
gcc \
musl-dev \
\
&& cp /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime \
&& echo "America/Sao_Paulo" > /etc/timezone \
&& pip3 install -r /requirements.txt \
&& apk del build-dependencies \
&& rm requirements.txt
COPY src /src
COPY run.py /run.py
CMD python3 run.py
Principais Comandos
17
Montar imagem:docker build -t <imageName> .
Rodar a imagem:docker run <imageName>
Pausar:docker container stop <ContainerID>
Pausar todos os containers da máquina:docker stop $(docker ps -a -q)
Remover todos os containers da máquina:docker system prune
Remover todos os imagens da máquina:docker rmi $(docker images -q)
Docker Compose
18
● Ferramenta para escrever em um único arquivo todos os detalhes do ambiente da aplicação. Com ele é possível definir todos os serviços que deseja-se criar e quais as características de cada serviço ( quantidade de containers, volumes, networks, secrets, etc.)
● Formato de arquivo YML
Principais comandos:Subir Containersdocker-compose up --build -d
Pausar containers:docker-compose down
Docker Compose
19
version: "3.7"
services:
mongodb_container:
container_name: "mongodb"
image: mongo:4.0
network_mode: host
volumes:
- mongodb_data:/data/db
ports:
- "27017:27017"
volumes:
mongodb_data:
Docker Hub
20
● Repositório público e privado de imagens que disponibiliza diversos recursos, como por exemplo, banco de dados, sistema de autenticação entre outras funcionalidades;
● Maior comunidade e biblioteca do mundo em imagens de contêineres;
● Grande uso pela comunidade;
● Reuso de Software;
● Economia de tempo.
https://hub.docker.com/
Docker Hub - Funcionalidades
21
● Repositório de imagens;
● Automatização da construção das imagens;
● Webhooks;
● Organização;
● Integração com GitHub e Bitbucket;
● Serviço de autenticação.
https://hub.docker.com/
Docker Hub - Comandos
22
Busca:docker search [OPTIONS] TERM
Login:docker login [OPTIONS][SERVER]
Pull:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Push:docker push [OPTIONS] NAME[:TAG]
https://hub.docker.com/
Orquestração de Containers
25
● Docker é muito bom para criar ambientes de sistemas que atendam diferentes estágios de desenvolvimento (testes e homologações), mas e quando uma aplicação está já está em produção?
● Exemplo:○ Você está em um avião em movimento e ele apresenta um problema. É
impossível parar o avião para consertá-lo, então é preciso resolver o problema com o avião em movimento.
Fonte
Orquestração de Containers
26
● O exemplo mostra a complexidade do ambiente de produção e os orquestradores de containers são responsáveis por preparar o ambiente para “manter o avião voando em perfeitas condições”.
● Os containers são passíveis a problemas, como:○ Travas;○ Lentidão;○ Dificuldades para lidar com upgrades;○ Sofrem instabilidades nos servidores.
Fonte
Orquestração de Containers
27
● As ferramentas de orquestração de containers são aplicações em nuvem que permitem fazer o gerenciamento de múltiplos contêineres.
● Objetivo:○ Cuidar do ciclo de vida dos containers de forma autônoma, subindo e
distribuindo, conforme as especificações ou as demandas.
Fonte
Kubernetes (K8s)
28
● Orquestrador de containers mais utilizado no mercado, por ter sido um dos primeiros orquestradores e também ser uma opção open source;
● Foi desenvolvida pela Google para projetos internos. Em 2015 foi entregue ao Cloud Native Computing Foundation e até hoje é mantida pela comunidade;
● Possui uma comunidade gigante;
● Possui uma curva de aprendizado acentuada.
Fonte
Docker Swarm
29
● Docker Swarm é uma ferramenta nativa do Docker para orquestração de containers;
● Open source;
● Possui configurações mais amigáveis, o que torna a curva de aprendizado menor;
● Possui uma curva de aprendizado mais leve.
Fonte
Kubernetes x Docker Swarm
30
Kubernetes Docker Swarm
Instalação complexa Fácil instalação
Alta curva de aprendizado Mais fácil de usar
Auto escalável Manualmente escalável
Imensa comunidade Comunidade menor em relação ao Kubernetes
É uma ferramenta muito robusta Possui limitação maior nas funcionalidades
Fonte
Outras Ferramentas
31
● Amazon ECS - Amazon;
● OpenShift - Red Hat;
● Google Container Engine - Google;
● Azure Container Service - Microsoft.
Referências
32
https://dockerswarm.rocks/https://docs.docker.com/https://github.com/paurakhsharma/python-microservice-fastapihttps://dev.to/paurakhsharma/microservice-in-python-using-fastapi-24cchttps://github.com/tiangolo/full-stack-fastapi-postgresqlhttps://www.nginx.com/https://doc.traefik.io/traefik/