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
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
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
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