← Início Redes · Aula 08
NET · 08

Docker Básico

Introdução a Containers — empacote, distribua e execute aplicações em qualquer lugar!

🤔 O que é Docker?

Docker = Plataforma para criar e executar containers!
"Funciona na minha máquina" nunca mais — com Docker, funciona em qualquer lugar!

Pense no Docker como um porto de containers de navio:

Containers são padronizados e funcionam em qualquer servidor — assim como um container de navio cabe em qualquer navio!

Conceitos Principais

ConceitoDefiniçãoAnalogia
ImagemTemplate somente-leitura🍰 Receita de bolo
ContainerImagem em execução🎂 Bolo já pronto
DockerfileInstruções para criar imagem📝 Lista de ingredientes
RegistryRepositório de imagens🏪 Supermercado de receitas
🌐 Docker Hub (hub.docker.com) — mais de 100.000 imagens prontas para usar!

Por que usar Docker?

⚔️ Container vs Máquina Virtual

CaracterísticaMáquina Virtual (VM)Container Docker
Sistema operacional❌ SO completo por instância✅ Compartilha kernel do host
Espaço em disco❌ Gigabytes✅ Megabytes
Tempo de inicialização❌ Minutos✅ Segundos
Uso de RAM/CPU❌ Alto✅ Baixo
Isolamento✅ Total (kernel próprio)✅ De processo

Arquitetura comparada

🖥 Máquina Virtual
Hardware → Host OS → Hypervisor → Guest OS → App

Cada VM precisa de um sistema operacional completo
🐳 Container Docker
Hardware → Host OS → Docker Engine → App

Todos os containers compartilham o mesmo kernel do host

1 Instalar o Docker

bash — instalação do Docker Engine
# Atualizar repositórios e instalar dependências $ sudo apt-get update $ sudo apt-get install ca-certificates curl gnupg # Adicionar chave GPG oficial do Docker $ sudo install -m 0755 -d /etc/apt/keyrings $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # Adicionar repositório oficial $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list # Instalar o Docker $ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
💡 Usar Docker sem sudo:
sudo usermod -aG docker $USER
Faça logout e login novamente para a alteração ter efeito.

2 Verificar a Instalação

bash — verificar versão
$ docker --version Docker version 24.0.7, build afdd53b
bash — testar com Hello World
$ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly.
🎉 Se você viu "Hello from Docker!", está tudo funcionando!
O Docker baixou a imagem hello-world do Docker Hub, criou um container e executou — tudo automaticamente.

📋 Comandos — Imagens

bash — gerenciar imagens
# Baixar uma imagem do Docker Hub $ docker pull nginx # Listar imagens locais $ docker images REPOSITORY TAG IMAGE ID SIZE nginx latest a6bd71f48f68 187MB hello-world latest d2c94e258dcb 13.3kB # Remover uma imagem $ docker rmi hello-world

Imagens Populares no Docker Hub

ImagemDescrição
nginxServidor web
mysqlBanco de dados MySQL
pythonAmbiente Python
nodeRuntime Node.js
ubuntuSistema Ubuntu mínimo

📦 Comandos — Containers

bash — gerenciar containers
# Criar e executar container $ docker run nginx # Executar em background (-d) com nome (--name) $ docker run -d --name meu-nginx nginx # Listar containers em execução $ docker ps # Listar TODOS os containers (inclusive parados) $ docker ps -a # Parar um container $ docker stop meu-nginx # Iniciar container parado $ docker start meu-nginx # Remover container $ docker rm meu-nginx

🔌 Mapeamento de Portas

Para acessar um serviço dentro do container, é preciso mapear as portas com -p!
bash — mapear porta host:container
# Sintaxe: -p PORTA_HOST:PORTA_CONTAINER $ docker run -d -p 8080:80 --name web nginx # Agora acesse: http://localhost:8080

Entendendo -p 8080:80:

ExemploSignificado
-p 80:80Mesma porta no host e no container
-p 3000:80Host porta 3000 → Container porta 80
-p 8080:8080Ambos usam porta 8080

💾 Volumes — Persistência de Dados

⚠ Containers são efêmeros! Quando você remove um container, todos os dados dentro dele são perdidos. Volumes resolvem esse problema.
bash — trabalhar com volumes
# Bind Mount: montar pasta local no container # Sintaxe: -v /caminho/host:/caminho/container $ docker run -d -p 8080:80 -v /home/user/site:/usr/share/nginx/html nginx # Volume nomeado: Docker gerencia o armazenamento $ docker volume create meus-dados $ docker run -d -v meus-dados:/var/lib/mysql mysql # Listar volumes $ docker volume ls
TipoSintaxeUso ideal
Bind Mount-v /caminho/host:/caminhoDesenvolvimento — edite e veja na hora
Volume Nomeado-v nome:/caminhoBancos de dados e dados persistentes

🚀 Exemplo Prático: Site com Nginx

Vamos colocar um site no ar em um container em menos de 1 minuto:

bash — site em container passo a passo
# 1. Criar pasta para o site $ mkdir ~/meu-site $ cd ~/meu-site # 2. Criar página HTML $ echo "<h1>Olá Docker!</h1>" > index.html # 3. Executar Nginx com o site mapeado $ docker run -d \ --name meu-site \ -p 8080:80 \ -v ~/meu-site:/usr/share/nginx/html \ nginx # 4. Acessar no navegador: http://localhost:8080
✅ Seu site está rodando em um container!
Edite o index.html e atualize o navegador — as mudanças aparecem instantaneamente graças ao bind mount.

Comandos úteis para esse container:

bash — inspecionar container
# Ver logs do container $ docker logs meu-site # Entrar dentro do container (terminal interativo) $ docker exec -it meu-site bash

🔧 Referência de Comandos

docker ps
Lista containers em execução (-a para todos)
docker images
Lista imagens baixadas localmente
docker pull
Baixa imagem do Docker Hub
docker run
Cria e executa um container a partir de uma imagem
docker stop/start
Para ou inicia um container existente
docker logs
Exibe a saída (stdout) do container

Limpeza

bash — liberar espaço em disco
# Remover containers parados $ docker container prune # Remover imagens não usadas $ docker image prune # Limpar TUDO não utilizado (containers, imagens, volumes, redes) $ docker system prune -a

🎯 Desafio Interativo

Arraste cada conceito para seu par correto:

Imagem
docker ps
-p
Docker Hub
-d
Template para criar containers
Comando para listar containers
Flag para mapear portas
Repositório público de imagens Docker
Flag para executar em background

🛠 Atividade Prática

💻 Terminal Linux ⏱ ~30 min 🧑‍💻 Individual
1
Instalar e verificar o Docker
Siga os passos de instalação e confirme com docker --version. Execute docker run hello-world para testar.
2
Baixar e rodar o Nginx
Execute docker run -d -p 8080:80 --name web nginx e acesse http://localhost:8080 no navegador. Confirme que a página padrão do Nginx aparece.
3
Criar site com bind mount
Crie a pasta ~/meu-site com um index.html personalizado. Suba um container Nginx mapeando essa pasta e acesse no navegador.
4
Explorar comandos
Liste os containers com docker ps -a, veja os logs com docker logs, pare e remova os containers criados. Limpe o ambiente com docker system prune.
📋 Observe: Edite o index.html enquanto o container está rodando e recarregue o navegador. O que acontece? Por que a mudança aparece instantaneamente?

❓ Verifique seu Conhecimento

Qual a diferença principal entre um container Docker e uma máquina virtual?

AContainers são mais lentos que VMs
BContainers compartilham o kernel do host, VMs têm kernel próprio
CContainers precisam de mais RAM que VMs
DContainers não podem executar aplicações web
✓ Containers Docker compartilham o kernel do sistema operacional host, tornando-os muito mais leves e rápidos que VMs completas.

Qual comando baixa uma imagem do Docker Hub sem iniciar um container?

Adocker run nginx
Bdocker get nginx
Cdocker pull nginx
Ddocker fetch nginx
docker pull baixa a imagem. docker run baixa (se necessário) E inicia o container.

Qual flag do comando docker run mapeia a porta 80 do container para a porta 8080 do host?

A-p 8080:80
B-p 80:8080
C--port 8080=80
D-map 8080:80
✓ A sintaxe é -p porta_host:porta_container. Então -p 8080:80 → acesse o Nginx em http://localhost:8080.

O que é um Dockerfile?

AUm arquivo de logs dos containers
BUm script de inicialização do Docker daemon
CUm arquivo de configuração do Docker Desktop
DUm arquivo de instruções para construir uma imagem Docker
✓ O Dockerfile contém instruções (FROM, RUN, COPY, CMD...) que definem como construir uma imagem. Use docker build -t nome . para gerar a imagem.