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

Uelton Cardeal Pimenta Filho Kleber Yuji Inoue Gustavo

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

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