Programação Concorrente e Distribuída

Containers

Aula 03 — Containers, Docker e sua infraestrutura
Prof. Newton S. B. Miyoshi
newton.miyoshi@baraodemaua.br
Centro Universitário Barão de Mauá — Ribeirão Preto
Tópicos

O que veremos hoje

  • Containers e Docker — e as diferenças com VMs
  • Vantagens
  • IaaS e PaaS
  • Infraestrutura do Docker
Parte 1

Containers e Docker

O que é um Container?

  • Uma forma de isolar uma aplicação virtualizando alguns componentes.
  • Uma “caixa” com os componentes mínimos para executar uma aplicação:
    • Próprio hostname, IP e disco
    • Aplicações dentro da caixa não acessam nada fora
  • Diferente de uma VM, há compartilhamento de CPU, memória e do Sistema Operacional.

O que é o Docker?

  • Plataforma para criar, gerenciar e compartilhar containers.
  • Oferece ferramentas para todo o ciclo de vida dos containers.
Logo do Docker (baleia)

Visão geral de um container

Container app1 com hostname, IP e disco próprios
O container tem seu próprio ambiente virtual, com recursos gerenciados pelo Docker.
Vários containers compartilhando o SO, a CPU e a memória do host
Containers compartilham o SO, a CPU e a memória do host — cada um com nome, IP e disco próprios.

Diferenças em relação às VMs

VMs têm o próprio SO e virtualizam todos os recursos computacionais.

  • SO host e guest
  • Muitos GB de tamanho · tempo de CPU · atualização de SO
  • Maior isolamento, porém menor densidade de computação e dados
Cada VM tem seu próprio SO sobre o hypervisor
Cada VM tem o seu próprio SO sobre o hypervisor.

VM × Container

Pilha de VM: App, Bins/Libs, Guest OS, Hypervisor, Infra
Máquina Virtual — um SO convidado por aplicação
Pilha de container: App, Bins/Libs, Docker, Host OS, Infra
Container — SO compartilhado via Docker
Parte 2

IaaS, PaaS e Containers

IaaS e PaaS

Comparação dos modelos IaaS e PaaS
IaaS: cada componente em sua VM (mais isolamento, mais custo). PaaS: componentes viram serviços gerenciados.
Aplicações em containers como um serviço PaaS leve e portável
Aplicações em containers são portáveis e leves — rodam local, na nuvem ou em um serviço gerenciado.
Parte 3

Vantagens

Atividade em grupo
?

Quais as vantagens de usar containers no projeto “Café com Pão”?

Comparem VM × Containers para o cenário.

Por que containers?

Flexível

Qualquer aplicação pode residir em um container.

Leve

Menos recursos que uma VM.

Portável

Build local, roda na nuvem.

Fracamente acoplado

Um container não interfere no outro.

Escalável

Replicável em um datacenter.

Seguro

Isolamento de processos.

Usos do Docker

  • CI/CD — Continuous Integration & Continuous Delivery
  • Desenvolvedores compartilham código por meio de containers
  • O ambiente de produção é o mesmo do de desenvolvimento
  • Criação de ambientes e rotinas de testes automatizados mais facilmente
Parte 4

Infraestrutura do Docker

Docker Engine

Aplicação cliente-servidor com os componentes:

  • Servidor (daemon) — gerencia containers, acessado por dockerd
  • API REST — interface para comunicar com o dockerd
  • Cliente CLI — o comando docker
    • Usa a REST API para criar e gerenciar imagens, containers, redes e volumes

Arquitetura do Docker

  • Arquitetura cliente-servidor.
  • O cliente docker comunica-se com o docker daemon:
    • É possível conectar remotamente
    • Comunicação pela REST API
    • Via sockets UNIX ou pela rede (internet)
Docker CLI, REST API e daemon gerenciando containers, imagens, redes e volumes
O cliente (CLI) fala com o daemon via REST API; o daemon gerencia containers, imagens, redes e volumes.
Cliente, Docker host (daemon, containers, imagens) e registry
build, pull e run: cliente → daemon → registry.

Instalando o Docker

docs.docker.com/get-docker

Docker Desktop para Mac, Windows e Linux
Docker Desktop está disponível para Mac, Windows e Linux.

Listando containers


$ sudo docker ps --all
CONTAINER ID   IMAGE   COMMAND   CREATED   STATUS   PORTS   NAMES
        

docker ps --all lista todos os containers (inclusive os parados).

Primeiro container: hello-world


$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
        

O container executou e saiu


$ sudo docker ps --all
CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                     NAMES
5a8a47623ab3   hello-world   "/hello"   3 minutes ago   Exited (0) 3 minutes ago   jolly_keller
        

Ele rodou, imprimiu a mensagem e terminou — ficando com status Exited (0).

Instalação no Windows (WSL)

Abra o terminal como administrador e execute:


PS C:\Users> wsl --install
Instalando: Plataforma de Máquina Virtual
Instalando: Subsistema do Windows para Linux
Instalando: Ubuntu
Êxito na operação. As alterações só terão efeito após reiniciar o sistema.
        
Importante
Reinicie o computador depois.

Configuração do Docker Desktop

Instalador do Docker Desktop com a opção Use WSL 2 marcada
Marque “Use WSL 2 instead of Hyper-V” na instalação.
Atividade

Instalar o Docker

  • Instale o Docker Desktop (no Windows, instale o WSL).
  • Rode o hello world visto em aula: docker run hello-world
  • Explore os comandos para listar containers, images, networks e volumes.

Referências