Uelton Cardeal Pimenta Filho Kleber Yuji Inoue Gustavo ...

33
Docker e sua Relação com Microsserviços Gabriel Angelo Sgarbi Cocenza Gabriel Muniz Morão Gustavo Pedralino de Oliveira Kleber Yuji Inoue Uelton Cardeal Pimenta Filho

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

VM vs Docker Container

5

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

Crescimento Utilização Docker

9 Fonte

Crescimento Utilização Docker

10 Fonte

Crescimento Utilização Docker

11 Fonte

Crescimento Utilização Docker

12 Fonte

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

15

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/

Docker Hub

23

https://docs.docker.com/

Docker Hub

24

https://docs.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/

OBRIGADO!

33