← Voltar ao Encontro 4
Sistemas Operacionais · ADS23
01 / 14
Encontro 4 de 17

Da Virtualização
aos Containers

Como uma máquina física vira várias máquinas isoladas — e por que, no fim das contas, o mercado trocou VMs inteiras por containers sempre que dá.

ADS23IFCE Campus HorizonteProf. José Stelio Sampaio Bastos Neto
↓ role pra avançar · use os pontos à direita pra navegar direto
De onde viemos

Três encontros de teoria — e um "spoiler" que ainda não veio de verdade

Encontro 3

Máquina virtual apareceu no jigsaw

Uma das 4 arquiteturas: um hipervisor finge, pra cada SO convidado, que ele tem hardware inteiro só pra si.

Encontro 3 (prática)

Vocês já rodaram docker run --rm alpine

E cronometraram: container sobe em milissegundos, VM leva segundos. Mas ainda não vimos por dentro de nenhum dos dois.

Hoje a gente para de espiar de longe: vira o assunto principal da aula, com Docker de verdade — imagem, Dockerfile, comandos que vocês vão usar centenas de vezes no curso e na profissão.

Pergunta pra turma

Uma empresa precisa rodar 50 sites diferentes,
de 50 clientes diferentes, numa única sala de servidores.

Ela não pode comprar 50 computadores físicos — caro, e a maioria ficaria ocioso a maior parte do tempo. Como isolar 50 ambientes diferentes dentro de poucas máquinas físicas?

É exatamente o problema que a virtualização resolve — e é o motivo dela ter nascido décadas antes do Docker existir.

Conceito

Virtualização: um hardware, vários sistemas operacionais

Um programa especial — o monitor de máquina virtual, ou hipervisor — cria, sobre um único computador físico, várias máquinas virtuais independentes. Cada uma roda seu próprio SO convidado, sem saber que está compartilhando hardware com outras.

Por que surgiu

Consolidar servidores caros e subutilizados, isolar ambientes de clientes diferentes, e testar vários sistemas operacionais sem comprar uma máquina pra cada um.

O preço disso

Cada VM carrega um núcleo inteiro — memória, disco e tempo de boot multiplicados por quantas VMs existirem na máquina física.

Reconhece essa ideia? É o mesmo VirtualBox que vocês instalaram na Semana 0 — só que rodando numa escala de data center, não no notebook de vocês.

Dois jeitos de virtualizar

Hipervisor tipo 1 (bare-metal) x tipo 2 (hospedado)

Tipo 1 · Bare-metal

Roda direto no hardware

Não existe um "SO anfitrião" por baixo — o próprio hipervisor é a camada mais baixa. Usado em data centers: VMware ESXi, Microsoft Hyper-V, Xen.

Tipo 2 · Hospedado

Roda como um programa comum

Existe um SO anfitrião normal (o Windows do laboratório, por exemplo) e o hipervisor roda como mais um aplicativo dentro dele. É o caso do VirtualBox que vocês usam.

VM 1
VM 2
VM 3
Hipervisor (tipo 1: direto no hardware · tipo 2: dentro de um SO anfitrião)
Hardware físico

Na prática do mercado: tipo 1 pra servidores de produção que precisam de desempenho máximo; tipo 2 pra desenvolvimento e testes no computador de cada pessoa.

Rapidamente

A "nuvem" é virtualização em escala industrial

Quando você aluga um servidor na AWS, Azure ou Google Cloud, o que você recebe de verdade é uma máquina virtual rodando dentro do data center de outra empresa — provisionada em segundos por um hipervisor tipo 1.

  • ▸IaaS (infraestrutura): você aluga a VM crua e instala tudo — o mais parecido com o VirtualBox de vocês.
  • ▸PaaS (plataforma): a nuvem já cuida do SO e do runtime — você só entrega o código.
  • ▸SaaS (software): você nem vê a infraestrutura — usa um produto pronto (e-mail, planilha online).
  • Não vamos aprofundar nuvem neste curso — é só pra vocês reconhecerem o vocabulário quando ele aparecer numa vaga de emprego ou numa reunião.

    Eixo do curso

    Container não é uma VM menor — é outra ideia

    Vocês já sentiram isso na pele no Encontro 3: um container Docker sobe em milissegundos, uma VM leva segundos ou minutos. A razão não é o container ser "uma VM otimizada" — é que ele resolve o isolamento de um jeito completamente diferente.

    Máquina virtualContainer
    KernelUm núcleo completo por VMCompartilha o núcleo do host
    IsolamentoHipervisor emula hardwarenamespaces + cgroups do próprio kernel
    PesoGBs de disco, minutos de bootMBs de disco, milissegundos de boot
    Isolamento entre "vizinhos"Total — núcleos nem se enxergamParcial — todos usam o mesmo núcleo por baixo

    É a mesma lição do jigsaw: menos isolamento arquitetural custa menos recurso — o segredo é saber quando cada um vale o preço.

    Agora Docker de verdade

    Imagem é a receita. Container é o prato pronto.

    Uma imagem é um pacote read-only com tudo que uma aplicação precisa: sistema de arquivos mínimo, bibliotecas, o binário da aplicação, e instruções de como rodar. Um container é uma instância em execução dessa imagem — como um objeto é uma instância de uma classe.

    Imagem (alpine, nginx, ubuntu…) — só leitura, guardada em disco
    Container A
    Container B
    Container C
    Cada container: a mesma imagem + uma camada de escrita própria + processo isolado

    Você pode rodar vários containers da mesma imagem ao mesmo tempo — cada um isolado, cada um achando que é o único processo na máquina.

    De onde vêm as imagens

    Docker Hub: o "GitHub" das imagens prontas

    Assim como vocês baixaram a imagem alpine no Encontro 3 sem construir nada, existe um repositório público — o Docker Hub — cheio de imagens prontas: nginx, postgres, python, node, e milhares de outras.

  • ▸docker pull <imagem> baixa uma imagem do Hub pro seu computador, sem rodar nada ainda.
  • ▸docker run <imagem> baixa (se precisar) e já sobe um container a partir dela.
  • ▸Quando a imagem que existe não serve, você escreve a sua própria — é o próximo slide.
  • Construindo sua própria imagem

    Dockerfile: a receita escrita em texto

    Um Dockerfile é um roteiro simples, linha por linha, de como montar uma imagem a partir de uma imagem-base.

    # imagem-base: um Linux mínimo FROM alpine:3.20 # copia um arquivo seu pra dentro da imagem COPY ola.sh /ola.sh # roda um comando DURANTE a construção RUN chmod +x /ola.sh # comando padrão QUANDO o container inicia CMD ["/ola.sh"]

    Reparem a diferença entre RUN (acontece uma vez, na hora de construir a imagem) e CMD (acontece toda vez que um container novo nasce dessa imagem).

    O vocabulário do dia a dia

    Os comandos que vocês vão digitar toda semana

    ComandoO que faz
    docker pull <img>Baixa uma imagem do Docker Hub
    docker imagesLista as imagens já baixadas/construídas localmente
    docker build -t nome .Constrói uma imagem a partir de um Dockerfile na pasta atual
    docker runCria e inicia um container a partir de uma imagem
    docker ps / docker ps -aLista containers rodando / todos (incluindo parados)
    docker logs <id>Mostra a saída que o container produziu
    docker stop / docker rmPara um container / remove um container parado
    Prévia da prática

    Do zero até um container próprio, ao vivo

    Uma sequência real: confirmar o Docker, baixar uma imagem, construir a própria, e rodar.

    Cada uma dessas linhas vira um passo do roteiro de laboratório de hoje — vocês vão rodar isso de verdade, na própria VM.

    Mão na massa

    De usuário de imagens prontas a autor da sua própria

    PARTE 1

    Imagens prontas

    docker pull, docker images, docker run com uma imagem pronta do Hub.

    PARTE 2

    Sua primeira imagem

    Escrever um Dockerfile mínimo, rodar docker build, e subir um container a partir dele.

    O roteiro de laboratório detalha os dois passo a passo, com dicas se algo travar. Todas as observações vão pro instrumento semanal (quiz) no fim.

    Para ler

    Leitura da semana

    🟢

    Laureano — Máquinas Virtuais

    Por que existem, tipos e estratégias de virtualização — a base teórica de hoje. p. 70–77

    🔵

    Tanenbaum — Hipervisores tipo 1 e tipo 2 · Nuvens

    O vocabulário que o mercado usa todo dia, direto da fonte. p. 329–330 e 342–344

    ⚪

    Tanenbaum — Virtualização e a nuvem (capítulo completo)

    Pra quem quer se aprofundar além do que cai no quiz. p. 327–357

    O quiz da semana verifica essa leitura e recolhe suas observações da prática — tudo no mesmo instrumento.