← 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.
📥 Baixar Flashcards desta aula (.txt)