Imagens e Containers
Aula 1 de 7
O que é Docker?
Docker empacota aplicações e dependências em containers isolados. Um container é um processo com namespace isolado, não uma VM.
VM: [App|Libs|Guest OS] | [Hypervisor] | [Host OS]
Container: [App|Libs] | [Docker Engine] | [Host OS]
Instalação
# Ubuntu
curl -fsSL https://get.docker.com | bash
sudo usermod -aG docker $USER # logout/login
# Verificar
docker --version
docker info
docker run hello-world
Primeiros Comandos
# Run
docker run -d --name meu-nginx -p 80:80 nginx:alpine
docker run -it --rm ubuntu:24.04 bash
# Listar
docker ps # rodando
docker ps -a # todos
docker images # imagens locais
# Gerenciar
docker stop meu-nginx
docker start meu-nginx
docker restart meu-nginx
docker rm meu-nginx -f
docker rmi nginx:alpine # remover imagem
# Executar comando
docker exec -it meu-nginx bash
docker exec meu-nginx cat /etc/nginx/conf.d/default.conf
# Logs
docker logs meu-nginx
docker logs -f meu-nginx # seguir
docker logs --tail 50 meu-nginx
Bind Mounts e Volumes
# Bind mount (path local)
docker run -d --name dev -v $(pwd)/app:/app node:20 node app.js
# Volume (gerenciado pelo Docker)
docker volume create app-data
docker run -d --name app -v app-data:/data nginx:alpine
# tmpfs (em memória, não persiste)
docker run --tmpfs /tmp alpine:latest
# Diferença
# Volume: gerenciado pelo Docker, isolado, backup fácil
# Bind: acesso direto ao filesystem do host
Port Mapping
# Mapear porta
docker run -p 8080:80 nginx:alpine
docker run -p 127.0.0.1:3000:3000 node:20
docker run -p 80:80 -p 443:443 nginx:alpine
# Network host (usar rede do host)
docker run --network host nginx:alpine
Lab: Servidor Web com Conteúdo Customizado
# Criar página
mkdir site
echo "<h1>Docker em ação</h1>" > site/index.html
# Rodar nginx com bind mount
docker run -d --name site \
-p 8080:80 \
-v $(pwd)/site:/usr/share/nginx/html:ro \
nginx:alpine
# Testar
curl localhost:8080
# Parar e limpar
docker stop site && docker rm site
Container != VM. Containers compartilham o kernel do host. Use imagens oficiais e Alpine quando possível (menor tamanho). Sempre fixe versão das imagens.