kb.erickguedes.com
Linux Avançado: Administração e Performance

Virtualização e Containers

Aula 6 de 7

KVM / QEMU

# Verificar suporte a virtualização
grep -E "vmx|svm" /proc/cpuinfo
kvm-ok

# Criar VM com virt-install
virt-install \
    --name ubuntu-vm \
    --ram 2048 \
    --vcpus 2 \
    --disk size=20 \
    --os-variant ubuntu22.04 \
    --cdrom ubuntu-22.04.iso \
    --network bridge=br0

# Gerenciamento
virsh list --all
virsh start ubuntu-vm
virsh shutdown ubuntu-vm
virsh console ubuntu-vm
virsh snapshot-create-as ubuntu-vm baseline

Docker

# Instalação
curl -fsSL https://get.docker.com | bash

# Comandos essenciais
docker ps                     # containers rodando
docker ps -a                  # todos containers
docker images                 # imagens locais
docker pull nginx:alpine
docker run -d --name web -p 80:80 nginx:alpine
docker exec -it web bash
docker logs -f web

# Dockerfile
cat << EOF > Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
EOF

docker build -t meu-app .
docker compose up -d

Podman — Alternativa sem Daemon

# Podman é drop-in replacement para Docker
podman run -d --name web -p 80:80 nginx:alpine
podman ps
podman exec -it web bash

# Rootless (não precisa de sudo)
podman run --rm hello-world

# Pods (grupos de containers)
podman pod create --name meu-pod -p 8080:80
podman run --pod meu-pod -d --name nginx nginx:alpine

LXC / LXD

# LXD — containers como VMs
lxc launch ubuntu:22.04 meu-container
lxc exec meu-container -- bash
lxc list
lxc config set meu-container limits.cpu 2
lxc config set meu-container limits.memory 512MB
lxc snapshot meu-container snap1
lxc restore meu-container snap1
lxc publish meu-container --alias ubuntu-base

Comparação

TecnologiaIsolamentoInicializaçãoConsumo
KVMCompleto (hardware)MinutosAlto
DockerNamespaces + cgroupsSegundosBaixo
PodmanNamespaces + cgroupsSegundosBaixo
LXC/LXDNamespaces + cgroupsSegundosBaixo

Docker é padrão para aplicações. LXD é útil para ambientes completos (VM-like). KVM para isolamento máximo. Podman para ambientes rootless.