SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
Aula 02 – Orquestração de Contêineres
linkedin.com/in/guijac
guilherme.cruz@alumni.usp.br
Prof. Esp. Guilherme Jorge Aragão da Cruz
Curso de Verão:
DevOps
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Roteiro
▪ Revisitando Virtualização:
▪ Máquinas Virtuais;
▪ WSL (Windows Subsystem for Linux);
▪ Contêineres:
▪ Definição;
▪ Contexto Histórico.
▪ Docker x Máquina Virtual;
▪ Imagem Docker;
▪ Dockerfile para Aplicação Python;
▪ Redis;
▪ Orquestração de Contêineres:
▪ Definição;
▪ Motivações;
▪ Principais Características;
▪ Docker Compose;
▪ Kubernetes;
▪ Referências Bibliográficas;
▪ Laboratório.
2 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Máquinas Virtuais
▪Máquinas virtuais (virtual machines – VMs) são
softwares que possibilitam um uso como um
computador físico, através de um processo
chamado de virtualização.
Fonte: Comparing Virtual Machines vs Docker Containers — Nick Janetakis
3 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
WSL (Windows Subsystem for Linux)
▪No passado recente, uma pessoa usuária de
Windows que tivesse a necessidade de utilizar
Linux precisaria recorrer a técnicas de dual boot ou
instalação de uma VM de terceiros;
Fonte: Como fazer um dual boot com Windows e Linux – Tecnoblog
4 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
WSL (Windows Subsystem for Linux)
▪WSL surge para simplificar este processo,
possibilitando uma virtualização nativa para Linux
em um ambiente Windows (Windows 11 ou no
Windows 10, versão 1903, build 18362 ou
superior).
Fonte: Elaboração Própria (2023)
5 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Contêineres?
6 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Contêineres?
Fonte: Entenda como funciona o transporte de container - TPC Logística Inteligente
7 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Contêineres?
Fonte: Entenda como funciona o transporte de container - TPC Logística Inteligente
Equipamento logístico versátil, utilizado para transportar
carga;
Permite uma economia de escala que não seria possível com
o manuseio de carga fracionada padrão, trazendo também
uma maior garantia de inviolabilidade e redução de perdas e
avarias.
TSA CARGO (2023)
8 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Contêineres – Definição
Conjunto de um ou mais processos organizados de forma
isolada em um sistema;
Todos os arquivos necessários para sua execução são
disponibilizados por uma imagem individual;
São portáteis e consistentes, possibilitando uma migração
entre os diferentes ambientes de desenvolvimento.
RED HAT (2023)
Fonte: O que é um container Linux? (redhat.com)
9 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Contêineres – Contexto Histórico
▪De forma ampla, contêineres surgem a partir da
necessidade de melhorias das máquinas virtuais;
▪Docker surge após uma série de conceitos
introduzidos por outras tecnologias.
Fonte: Containerization History - Docker Handbook (gitbook.io)
10 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Contêineres – Contexto Histórico
▪De forma ampla, contêineres surgem a partir da
necessidade de melhorias das máquinas virtuais;
▪Docker surge após uma série de conceitos
introduzidos por outras tecnologias.
Fonte: Podman, a nova opção para container engine – uma alternativa ao Docker | iMasters
11 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Docker x Máquina Virtual
Fonte: Container vs VM (Virtual Machine) - Know the Difference (k21academy.com)
12 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Imagem Docker
▪Uma imagem Docker contém todos os arquivos
necessários para a execução de um contêiner;
▪É uma representação imutável de como o
contêiner será construído.
Fonte: Docker containers: What are the open source licensing considerations?
(linuxfoundation.org)
13 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Dockerfile para Aplicação Python
# Especificação da imagem Docker a ser utilizada, neste caso a imagem Python
# oficial da Docker, versão “slim-buster” (imagem fica com tamanho menor)
FROM python:3.8-slim-buster
# Para fins de organização, devemos definir o diretório de trabalho do contêiner,
# aqui todos os comandos serão executados, além da sua própria aplicação.
WORKDIR /my-flask-app-docker
# Realiza a cópia do arquivo existente em nosso diretório para o diretório
# (workdir) do contêiner
COPY requirements.txt requirements.txt
# Executa a instalação da dependência do projeto, uma boa prática é justamente
# especificar estas dependências em um arquivo texto.
RUN pip3 install -r requirements.txt
# Realiza a cópia dos demais arquivos em nosso diretório, para o diretório do
# contêiner (em nosso exemplo, arquivo app.py e Dockerfile)
COPY . .
# Instrução para a execução da aplicação do contêiner, a mesma coisa que
# python -m flask run --host=0.0.0.0
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]
Fonte: Elaboração Própria (2023)
14 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Dockerfile para Aplicação Python
docker build --tag my-flask-app-docker .
[+] Building 69.7s (4/9)
=> [1/5] FROM docker.io/library/python@sha256:d3
.
.
.
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-flask-app-docker latest 40f8ac1a4476 About a minute ago 941MB
docker run -d -p 5000:5000 my-flask-app-docker
Fc156fe6303cda57795ae9852d089536bc87febec4ff22f42565e1d043aa4a17
15 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Redis
▪ Acrônimo de REmote DIctionary Server;
▪ Trabalha com armazenamento de estrutura de dados de
chave-valor na memória, possuindo uma boa
performance, sendo utilizado principalmente para cache
de dados.
Fonte: Redis: What It Is, What It Does, and Why You Should Care | Backendless
16 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Redis
Fonte: EP22: Latency numbers you should know. Also... - by Alex Xu (bytebytego.com)
1 ns = 10-9 seconds | 1 us = 10-6 seconds = 1.000 ns | 1 ms = 10-3 seconds = 1.000 us = 1.000.000 ns
17 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Orquestração?
18 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Orquestração?
Fonte: O que é uma Orquestra Sinfônica? | Souza Lima
19 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Orquestração?
Fonte: O que é uma Orquestra Sinfônica? | Souza Lima
Ato de compor ou adaptar uma melodia para uma orquestra,
organizado em instrumentos para executar cada parte,
podendo se unir com outros instrumentos.
Coordenar de forma harmônica.
SOUZA LIMA - CONSERVATÓRIO E FACULDADE DE MÚSICA (2023)
20 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Orquestração de Contêineres – Definição
Processo que automatiza e gerencia um grande número de
contêineres e como eles interagem entre si.
MICROSOFT (2023)
Fonte: Elaboração Própria (2023)
Conteinêr 1: PythonApp Conteinêr 2: Redis
Conteinêr 3: MySQL Conteinêr 4: JavaApp
Host Host
Orquestrador de Contêineres
21 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Orquestração de Contêineres – Motivações
▪ Em um ambiente que faz uso massivo de contêineres
chegaremos na ordem de centenas ou mesmo milhares
de componentes para serem gerenciados.
Fonte: Elaboração Própria (2023)
Conteinêr 1: PythonApp Conteinêr 2: Redis
Conteinêr 3: MySQL Conteinêr 4: JavaApp
Host Host
22 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Orquestração de Contêineres – Motivações
▪ Em grande parte dos casos, contêineres também
possuem dependências entre si.
Fonte: Elaboração Própria (2023)
Conteinêr 1: WebApp
localhost:8000 redis:6379
Conteinêr 2: Redis
Host Host
23 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Orquestração de Contêineres – Principais
Características
• Monitora a integridade do ambiente, inspecionando
falhas de contêineres e reiniciando automaticamente;
• Habilita contêineres para localizarem uns aos outros
automaticamente, mesmo quando eles trocam de
computadores host e mudam seus endereços IP, através
da Descoberta de Serviços;
• Gerencia a Configuração das aplicações, com base no
contêiner em que ela será executada;
• Realiza o Balanceamento de Carga e Roteamento de
Tráfego.
MICROSOFT e RED HAT (2023)
24 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Docker Compose
Exemplo de arquivo docker-compose.yml para uso de uma aplicação web com dependência do Redis.
docker-compose up # cria e inicializa os contêineres definidos em um arquivo docker-compose.yml
docker-compose down # paralisa e remove todos os contêineres e seus componentes como, imagem e volume.
version: "3.9"
services:
redis:
image: redis:alpine
ports:
- '6379:6379'
web:
# o mesmo que um "docker build"
build:
# localização do arquivo "Dockerfile"
context: .
# identificação de parada da aplicação para o contêiner
# flask requires SIGINT to stop gracefully
# (default stop signal from Compose is SIGTERM)
stop_signal: SIGINT
ports:
- '5000:5000'
depends_on:
- redis
25 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Docker Compose
version: "3.9"
services:
redis:
image: redis:alpine
ports:
- '6379:6379'
web:
build:
context: .
stop_signal: SIGINT
ports:
- '5000:5000'
depends_on:
- redis
build run
web
run
web
Host
Conteinêr 2: Redis Conteinêr 1: Web
host:6379
host:5000
Fonte: Elaboração Própria (2023)
Orquestrador
de
Contêineres
26 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Kubernetes
Fonte: Sensu | How Kubernetes works
27 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Referências Bibliográficas
DOCKER. Awesome Compose. Disponível em https://github.com/docker/awesome-composse. Acesso em
08 mar 2023;
DOCKER. Compose file version 3 reference. Disponível em https://docs.docker.com/compose/compose-
file/compose-file-v3/. Acesso em 10 mar 2023;
MICROSOFT. Visão geral da Orquestração de Contêineres do Windows. Disponível em
https://learn.microsoft.com/pt-br/virtualization/windowscontainers/about/overview-container-
orchestrators. Acesso em 08 mar 2023;
RED HAT. O que é orquestração de containers? Disponível em https://www.redhat.com/pt-
br/topics/containers/what-is-container-orchestration. Acesso em 08 mar 2023;
RISSETO, Fabrício. ESBs, o que são, do que se alimentam. Disponível em
http://www.fabriciorissetto.com/blog/ESBs/. Acesso em 09 mar 2023;
WALLEN, Jack. Simplifying the mystery: When to use docker, docker-compose, docker swarm and
Kubernetes. Disponível em https://www.techrepublic.com/article/simplifying-the-mystery-when-to-use-
docker-docker-compose-and-kubernetes/. Acesso em 08 mar 2023;
28 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Por hoje (de teoria) é só!
linkedin.com/in/guijac
guilherme.jacruz@sp.senac.br
Prof. Esp. Guilherme Jorge Aragão da Cruz
Fonte: What is Container Orchestration? Definition & Related FAQs | Avi Networks
29 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Laboratório
▪ Docker Compose com Flask + Redis;
▪ Criar um arquivo Dockerfile (slide 14);
▪ Criar o arquivo docker-compose.yml (slide 25);
▪ Desenvolver um uso simples do Redis (slide 30);
▪ Subir a aplicação e o Redis através do comando
docker-compose up;
* Opcional: utilizar outras imagens/integrações,
como banco de dados.
Referência: lab-devops/projetos-gitlab/flask-redis-
compose at main · guijac/lab-devops · GitHub
30 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Laboratório
Fonte: lab-devops/projetos-gitlab/flask-redis-compose at main · guijac/lab-devops · GitHub
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def hello():
redis.incr('hits')
counter = str(redis.get('hits'),'utf-8')
return "This webpage has been viewed "+counter+" time(s)"
if __name__ == "__main__":
app.run(debug=True)
app.py
requirements.txt
flask
redis
31 de 32
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Por hoje (agora sim) é só!
linkedin.com/in/guijac
guilherme.jacruz@sp.senac.br
Prof. Esp. Guilherme Jorge Aragão da Cruz
Fonte: What is Container Orchestration? Definition & Related FAQs | Avi Networks
32 de 32
http://linkedin.com/in/guijac

Mais conteúdo relacionado

Semelhante a Curso de Verão - Aula 02 - Orquestração de Contêineres

Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogCesar Augusto Nogueira
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo realEvandro Silvestre
 
Docker - Um capitulo à parte
Docker - Um capitulo à parteDocker - Um capitulo à parte
Docker - Um capitulo à parteMaurício Harley
 
Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerBruno Ricardo Siqueira
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucaoFernando Ike
 
Monitoramento de containers Docker
Monitoramento de containers DockerMonitoramento de containers Docker
Monitoramento de containers DockerJosé Barbosa
 
Transportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerTransportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerAécio Pires
 
Docker Everywhere - MTAC Week
Docker Everywhere - MTAC WeekDocker Everywhere - MTAC Week
Docker Everywhere - MTAC WeekLuiz Carlos Faria
 
Docker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoDocker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoTobias Sette
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaMatheus Fidelis
 
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e KubernetesWorkshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e KubernetesRodrigo Cândido da Silva
 
[Unirede] Webinar: Transportando as aplicações entre vários ambientes com Docker
[Unirede] Webinar: Transportando as aplicações entre vários ambientes com Docker[Unirede] Webinar: Transportando as aplicações entre vários ambientes com Docker
[Unirede] Webinar: Transportando as aplicações entre vários ambientes com DockerAécio Pires
 
Usp codelabs (docker)
Usp codelabs (docker)Usp codelabs (docker)
Usp codelabs (docker)TechCobli
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...Renato Groff
 
O poder dos microsserviços com Docker e Kubernetes
O poder dos microsserviços com Docker e KubernetesO poder dos microsserviços com Docker e Kubernetes
O poder dos microsserviços com Docker e KubernetesWillian Azevedo
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...Renato Groff
 

Semelhante a Curso de Verão - Aula 02 - Orquestração de Contêineres (20)

Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnog
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo real
 
Docker - Um capitulo à parte
Docker - Um capitulo à parteDocker - Um capitulo à parte
Docker - Um capitulo à parte
 
Iniciando com kubernetes
Iniciando com kubernetesIniciando com kubernetes
Iniciando com kubernetes
 
Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando Docker
 
Docker para maiores
Docker para maioresDocker para maiores
Docker para maiores
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucao
 
Freedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, dockerFreedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, docker
 
Monitoramento de containers Docker
Monitoramento de containers DockerMonitoramento de containers Docker
Monitoramento de containers Docker
 
Transportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerTransportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com Docker
 
Docker Everywhere - MTAC Week
Docker Everywhere - MTAC WeekDocker Everywhere - MTAC Week
Docker Everywhere - MTAC Week
 
Docker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoDocker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de uso
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG Cabreúva
 
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e KubernetesWorkshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
 
[Unirede] Webinar: Transportando as aplicações entre vários ambientes com Docker
[Unirede] Webinar: Transportando as aplicações entre vários ambientes com Docker[Unirede] Webinar: Transportando as aplicações entre vários ambientes com Docker
[Unirede] Webinar: Transportando as aplicações entre vários ambientes com Docker
 
Usp codelabs (docker)
Usp codelabs (docker)Usp codelabs (docker)
Usp codelabs (docker)
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
 
O poder dos microsserviços com Docker e Kubernetes
O poder dos microsserviços com Docker e KubernetesO poder dos microsserviços com Docker e Kubernetes
O poder dos microsserviços com Docker e Kubernetes
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
 
Olá docker
Olá dockerOlá docker
Olá docker
 

Curso de Verão - Aula 02 - Orquestração de Contêineres

  • 1. Aula 02 – Orquestração de Contêineres linkedin.com/in/guijac guilherme.cruz@alumni.usp.br Prof. Esp. Guilherme Jorge Aragão da Cruz Curso de Verão: DevOps http://linkedin.com/in/guijac
  • 2. linkedin.com/in/guijac Roteiro ▪ Revisitando Virtualização: ▪ Máquinas Virtuais; ▪ WSL (Windows Subsystem for Linux); ▪ Contêineres: ▪ Definição; ▪ Contexto Histórico. ▪ Docker x Máquina Virtual; ▪ Imagem Docker; ▪ Dockerfile para Aplicação Python; ▪ Redis; ▪ Orquestração de Contêineres: ▪ Definição; ▪ Motivações; ▪ Principais Características; ▪ Docker Compose; ▪ Kubernetes; ▪ Referências Bibliográficas; ▪ Laboratório. 2 de 32 http://linkedin.com/in/guijac
  • 3. linkedin.com/in/guijac Máquinas Virtuais ▪Máquinas virtuais (virtual machines – VMs) são softwares que possibilitam um uso como um computador físico, através de um processo chamado de virtualização. Fonte: Comparing Virtual Machines vs Docker Containers — Nick Janetakis 3 de 32 http://linkedin.com/in/guijac
  • 4. linkedin.com/in/guijac WSL (Windows Subsystem for Linux) ▪No passado recente, uma pessoa usuária de Windows que tivesse a necessidade de utilizar Linux precisaria recorrer a técnicas de dual boot ou instalação de uma VM de terceiros; Fonte: Como fazer um dual boot com Windows e Linux – Tecnoblog 4 de 32 http://linkedin.com/in/guijac
  • 5. linkedin.com/in/guijac WSL (Windows Subsystem for Linux) ▪WSL surge para simplificar este processo, possibilitando uma virtualização nativa para Linux em um ambiente Windows (Windows 11 ou no Windows 10, versão 1903, build 18362 ou superior). Fonte: Elaboração Própria (2023) 5 de 32 http://linkedin.com/in/guijac
  • 7. linkedin.com/in/guijac Contêineres? Fonte: Entenda como funciona o transporte de container - TPC Logística Inteligente 7 de 32 http://linkedin.com/in/guijac
  • 8. linkedin.com/in/guijac Contêineres? Fonte: Entenda como funciona o transporte de container - TPC Logística Inteligente Equipamento logístico versátil, utilizado para transportar carga; Permite uma economia de escala que não seria possível com o manuseio de carga fracionada padrão, trazendo também uma maior garantia de inviolabilidade e redução de perdas e avarias. TSA CARGO (2023) 8 de 32 http://linkedin.com/in/guijac
  • 9. linkedin.com/in/guijac Contêineres – Definição Conjunto de um ou mais processos organizados de forma isolada em um sistema; Todos os arquivos necessários para sua execução são disponibilizados por uma imagem individual; São portáteis e consistentes, possibilitando uma migração entre os diferentes ambientes de desenvolvimento. RED HAT (2023) Fonte: O que é um container Linux? (redhat.com) 9 de 32 http://linkedin.com/in/guijac
  • 10. linkedin.com/in/guijac Contêineres – Contexto Histórico ▪De forma ampla, contêineres surgem a partir da necessidade de melhorias das máquinas virtuais; ▪Docker surge após uma série de conceitos introduzidos por outras tecnologias. Fonte: Containerization History - Docker Handbook (gitbook.io) 10 de 32 http://linkedin.com/in/guijac
  • 11. linkedin.com/in/guijac Contêineres – Contexto Histórico ▪De forma ampla, contêineres surgem a partir da necessidade de melhorias das máquinas virtuais; ▪Docker surge após uma série de conceitos introduzidos por outras tecnologias. Fonte: Podman, a nova opção para container engine – uma alternativa ao Docker | iMasters 11 de 32 http://linkedin.com/in/guijac
  • 12. linkedin.com/in/guijac Docker x Máquina Virtual Fonte: Container vs VM (Virtual Machine) - Know the Difference (k21academy.com) 12 de 32 http://linkedin.com/in/guijac
  • 13. linkedin.com/in/guijac Imagem Docker ▪Uma imagem Docker contém todos os arquivos necessários para a execução de um contêiner; ▪É uma representação imutável de como o contêiner será construído. Fonte: Docker containers: What are the open source licensing considerations? (linuxfoundation.org) 13 de 32 http://linkedin.com/in/guijac
  • 14. linkedin.com/in/guijac Dockerfile para Aplicação Python # Especificação da imagem Docker a ser utilizada, neste caso a imagem Python # oficial da Docker, versão “slim-buster” (imagem fica com tamanho menor) FROM python:3.8-slim-buster # Para fins de organização, devemos definir o diretório de trabalho do contêiner, # aqui todos os comandos serão executados, além da sua própria aplicação. WORKDIR /my-flask-app-docker # Realiza a cópia do arquivo existente em nosso diretório para o diretório # (workdir) do contêiner COPY requirements.txt requirements.txt # Executa a instalação da dependência do projeto, uma boa prática é justamente # especificar estas dependências em um arquivo texto. RUN pip3 install -r requirements.txt # Realiza a cópia dos demais arquivos em nosso diretório, para o diretório do # contêiner (em nosso exemplo, arquivo app.py e Dockerfile) COPY . . # Instrução para a execução da aplicação do contêiner, a mesma coisa que # python -m flask run --host=0.0.0.0 CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"] Fonte: Elaboração Própria (2023) 14 de 32 http://linkedin.com/in/guijac
  • 15. linkedin.com/in/guijac Dockerfile para Aplicação Python docker build --tag my-flask-app-docker . [+] Building 69.7s (4/9) => [1/5] FROM docker.io/library/python@sha256:d3 . . . docker images REPOSITORY TAG IMAGE ID CREATED SIZE my-flask-app-docker latest 40f8ac1a4476 About a minute ago 941MB docker run -d -p 5000:5000 my-flask-app-docker Fc156fe6303cda57795ae9852d089536bc87febec4ff22f42565e1d043aa4a17 15 de 32 http://linkedin.com/in/guijac
  • 16. linkedin.com/in/guijac Redis ▪ Acrônimo de REmote DIctionary Server; ▪ Trabalha com armazenamento de estrutura de dados de chave-valor na memória, possuindo uma boa performance, sendo utilizado principalmente para cache de dados. Fonte: Redis: What It Is, What It Does, and Why You Should Care | Backendless 16 de 32 http://linkedin.com/in/guijac
  • 17. linkedin.com/in/guijac Redis Fonte: EP22: Latency numbers you should know. Also... - by Alex Xu (bytebytego.com) 1 ns = 10-9 seconds | 1 us = 10-6 seconds = 1.000 ns | 1 ms = 10-3 seconds = 1.000 us = 1.000.000 ns 17 de 32 http://linkedin.com/in/guijac
  • 19. linkedin.com/in/guijac Orquestração? Fonte: O que é uma Orquestra Sinfônica? | Souza Lima 19 de 32 http://linkedin.com/in/guijac
  • 20. linkedin.com/in/guijac Orquestração? Fonte: O que é uma Orquestra Sinfônica? | Souza Lima Ato de compor ou adaptar uma melodia para uma orquestra, organizado em instrumentos para executar cada parte, podendo se unir com outros instrumentos. Coordenar de forma harmônica. SOUZA LIMA - CONSERVATÓRIO E FACULDADE DE MÚSICA (2023) 20 de 32 http://linkedin.com/in/guijac
  • 21. linkedin.com/in/guijac Orquestração de Contêineres – Definição Processo que automatiza e gerencia um grande número de contêineres e como eles interagem entre si. MICROSOFT (2023) Fonte: Elaboração Própria (2023) Conteinêr 1: PythonApp Conteinêr 2: Redis Conteinêr 3: MySQL Conteinêr 4: JavaApp Host Host Orquestrador de Contêineres 21 de 32 http://linkedin.com/in/guijac
  • 22. linkedin.com/in/guijac Orquestração de Contêineres – Motivações ▪ Em um ambiente que faz uso massivo de contêineres chegaremos na ordem de centenas ou mesmo milhares de componentes para serem gerenciados. Fonte: Elaboração Própria (2023) Conteinêr 1: PythonApp Conteinêr 2: Redis Conteinêr 3: MySQL Conteinêr 4: JavaApp Host Host 22 de 32 http://linkedin.com/in/guijac
  • 23. linkedin.com/in/guijac Orquestração de Contêineres – Motivações ▪ Em grande parte dos casos, contêineres também possuem dependências entre si. Fonte: Elaboração Própria (2023) Conteinêr 1: WebApp localhost:8000 redis:6379 Conteinêr 2: Redis Host Host 23 de 32 http://linkedin.com/in/guijac
  • 24. linkedin.com/in/guijac Orquestração de Contêineres – Principais Características • Monitora a integridade do ambiente, inspecionando falhas de contêineres e reiniciando automaticamente; • Habilita contêineres para localizarem uns aos outros automaticamente, mesmo quando eles trocam de computadores host e mudam seus endereços IP, através da Descoberta de Serviços; • Gerencia a Configuração das aplicações, com base no contêiner em que ela será executada; • Realiza o Balanceamento de Carga e Roteamento de Tráfego. MICROSOFT e RED HAT (2023) 24 de 32 http://linkedin.com/in/guijac
  • 25. linkedin.com/in/guijac Docker Compose Exemplo de arquivo docker-compose.yml para uso de uma aplicação web com dependência do Redis. docker-compose up # cria e inicializa os contêineres definidos em um arquivo docker-compose.yml docker-compose down # paralisa e remove todos os contêineres e seus componentes como, imagem e volume. version: "3.9" services: redis: image: redis:alpine ports: - '6379:6379' web: # o mesmo que um "docker build" build: # localização do arquivo "Dockerfile" context: . # identificação de parada da aplicação para o contêiner # flask requires SIGINT to stop gracefully # (default stop signal from Compose is SIGTERM) stop_signal: SIGINT ports: - '5000:5000' depends_on: - redis 25 de 32 http://linkedin.com/in/guijac
  • 26. linkedin.com/in/guijac Docker Compose version: "3.9" services: redis: image: redis:alpine ports: - '6379:6379' web: build: context: . stop_signal: SIGINT ports: - '5000:5000' depends_on: - redis build run web run web Host Conteinêr 2: Redis Conteinêr 1: Web host:6379 host:5000 Fonte: Elaboração Própria (2023) Orquestrador de Contêineres 26 de 32 http://linkedin.com/in/guijac
  • 27. linkedin.com/in/guijac Kubernetes Fonte: Sensu | How Kubernetes works 27 de 32 http://linkedin.com/in/guijac
  • 28. linkedin.com/in/guijac Referências Bibliográficas DOCKER. Awesome Compose. Disponível em https://github.com/docker/awesome-composse. Acesso em 08 mar 2023; DOCKER. Compose file version 3 reference. Disponível em https://docs.docker.com/compose/compose- file/compose-file-v3/. Acesso em 10 mar 2023; MICROSOFT. Visão geral da Orquestração de Contêineres do Windows. Disponível em https://learn.microsoft.com/pt-br/virtualization/windowscontainers/about/overview-container- orchestrators. Acesso em 08 mar 2023; RED HAT. O que é orquestração de containers? Disponível em https://www.redhat.com/pt- br/topics/containers/what-is-container-orchestration. Acesso em 08 mar 2023; RISSETO, Fabrício. ESBs, o que são, do que se alimentam. Disponível em http://www.fabriciorissetto.com/blog/ESBs/. Acesso em 09 mar 2023; WALLEN, Jack. Simplifying the mystery: When to use docker, docker-compose, docker swarm and Kubernetes. Disponível em https://www.techrepublic.com/article/simplifying-the-mystery-when-to-use- docker-docker-compose-and-kubernetes/. Acesso em 08 mar 2023; 28 de 32 http://linkedin.com/in/guijac
  • 29. linkedin.com/in/guijac Por hoje (de teoria) é só! linkedin.com/in/guijac guilherme.jacruz@sp.senac.br Prof. Esp. Guilherme Jorge Aragão da Cruz Fonte: What is Container Orchestration? Definition & Related FAQs | Avi Networks 29 de 32 http://linkedin.com/in/guijac
  • 30. linkedin.com/in/guijac Laboratório ▪ Docker Compose com Flask + Redis; ▪ Criar um arquivo Dockerfile (slide 14); ▪ Criar o arquivo docker-compose.yml (slide 25); ▪ Desenvolver um uso simples do Redis (slide 30); ▪ Subir a aplicação e o Redis através do comando docker-compose up; * Opcional: utilizar outras imagens/integrações, como banco de dados. Referência: lab-devops/projetos-gitlab/flask-redis- compose at main · guijac/lab-devops · GitHub 30 de 32 http://linkedin.com/in/guijac
  • 31. linkedin.com/in/guijac Laboratório Fonte: lab-devops/projetos-gitlab/flask-redis-compose at main · guijac/lab-devops · GitHub from flask import Flask from redis import Redis app = Flask(__name__) redis = Redis(host='redis', port=6379) @app.route('/') def hello(): redis.incr('hits') counter = str(redis.get('hits'),'utf-8') return "This webpage has been viewed "+counter+" time(s)" if __name__ == "__main__": app.run(debug=True) app.py requirements.txt flask redis 31 de 32 http://linkedin.com/in/guijac
  • 32. linkedin.com/in/guijac Por hoje (agora sim) é só! linkedin.com/in/guijac guilherme.jacruz@sp.senac.br Prof. Esp. Guilherme Jorge Aragão da Cruz Fonte: What is Container Orchestration? Definition & Related FAQs | Avi Networks 32 de 32 http://linkedin.com/in/guijac