Desenvolvimento · Ferramentas

Docker para iniciantes: o que é um container e como usar no dia a dia

Edson Feitosa de Oliveira Junior
Edson Feitosa de Oliveira Junior Fundador e Engenheiro Líder · PruPru Digital Services

Docker é uma ferramenta que empacota uma aplicação junto com tudo o que ela precisa para rodar (runtime, bibliotecas, configurações) em uma unidade chamada container. O container roda igual no seu notebook, no computador do colega e no servidor, o que acaba com o clássico "na minha máquina funciona".

Para quem está começando, o ganho mais imediato é outro: subir um PostgreSQL, um Redis ou a própria API com um comando, sem instalar nada disso no sistema. Neste guia você vai entender imagem, container, Dockerfile e volumes, montar um exemplo com uma API e um banco de dados usando docker compose e conhecer os erros mais comuns.

Imagem e container: a diferença

Uma comparação útil: a imagem é como a classe e o container é o objeto. Containers não são máquinas virtuais. Eles compartilham o kernel do sistema hospedeiro e por isso iniciam em segundos e consomem bem menos memória.

Instalação

No Windows e no macOS, instale o Docker Desktop. No Windows, ele usa o WSL 2 (Subsistema do Windows para Linux), e a virtualização precisa estar ativada na BIOS/UEFI; se o instalador reclamar disso, o ajuste é feito nas configurações do processador da placa-mãe. No Linux, instale o Docker Engine pelo repositório oficial da distribuição seguindo a documentação do Docker. Confira com:

docker --version
docker run hello-world

Containers consomem memória. Em um notebook com 8 GB, rodar banco, API, IDE e navegador ao mesmo tempo pode ficar apertado; o artigo quanta memória RAM eu preciso ajuda a dimensionar.

Primeiros comandos

Subir um PostgreSQL para estudo, sem instalar o banco no sistema:

docker run -d --name meu-postgres \
  -e POSTGRES_PASSWORD=segredo \
  -p 5432:5432 \
  postgres:17

O -d roda em segundo plano, -e define uma variável de ambiente e -p 5432:5432 liga a porta do seu computador à porta do container (sempre no formato host:container). No PowerShell, troque as barras invertidas de quebra de linha por crases ou escreva tudo em uma linha.

ComandoPara que serve
docker psLista containers em execução (-a mostra também os parados)
docker logs -f meu-postgresMostra os logs e acompanha em tempo real
docker exec -it meu-postgres psql -U postgresExecuta um comando dentro do container
docker stop meu-postgresPara o container
docker rm meu-postgresRemove o container parado
docker imagesLista as imagens baixadas

Com o banco no ar, você já pode praticar os comandos do artigo SQL básico.

Dockerfile: criando a imagem da sua aplicação

O Dockerfile é a receita da sua imagem. Para uma API Java já compilada em um arquivo .jar (como a do artigo sua primeira API com Spring Boot):

FROM eclipse-temurin:21-jre
WORKDIR /app
COPY target/minha-api.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

Para construir e rodar: docker build -t minha-api . e depois docker run -p 8080:8080 minha-api. Crie também um arquivo .dockerignore com pastas como .git e node_modules, para não enviar lixo ao build.

Volumes: onde os dados sobrevivem

Tudo o que é gravado dentro de um container some quando ele é removido. Para um banco de dados, isso seria um desastre. A solução são os volumes, áreas de armazenamento gerenciadas pelo Docker que ficam fora do ciclo de vida do container. Você remove e recria o container do banco, e os dados continuam lá.

Existe também o bind mount, que liga uma pasta do seu computador a uma pasta do container. É útil em desenvolvimento para editar arquivos e ver o resultado na hora.

docker compose: API e banco juntos

Quando o projeto tem mais de um serviço, digitar vários docker run fica inviável. O docker compose descreve tudo em um arquivo compose.yaml:

services:
  db:
    image: postgres:17
    environment:
      POSTGRES_DB: loja
      POSTGRES_USER: loja
      POSTGRES_PASSWORD: segredo
    volumes:
      - dados-pg:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U loja -d loja"]
      interval: 5s
      timeout: 5s
      retries: 10

  api:
    build: .
    ports:
      - "8080:8080"
    environment:
      SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/loja
      SPRING_DATASOURCE_USERNAME: loja
      SPRING_DATASOURCE_PASSWORD: segredo
    depends_on:
      db:
        condition: service_healthy

volumes:
  dados-pg:

Pontos importantes desse arquivo:

Os comandos do dia a dia são docker compose up -d --build para subir (reconstruindo a imagem da API), docker compose logs -f api para ver os logs e docker compose down para parar e remover os containers. Cuidado com docker compose down -v: o -v apaga também os volumes, ou seja, os dados do banco.

Erros comuns de quem está começando

  1. Usar localhost entre containers. Dentro de um container, localhost é o próprio container. Use o nome do serviço.
  2. Porta já em uso. Se você tem um PostgreSQL instalado no sistema, a porta 5432 já está ocupada. Mude o lado do host, por exemplo "5433:5432".
  3. Esquecer o volume do banco e perder os dados ao recriar o container.
  4. Usar a tag latest em tudo. Uma atualização da imagem pode quebrar o projeto sem aviso. Fixe versões, como postgres:17.
  5. Colocar senhas no Dockerfile ou no repositório. Em projetos reais, use variáveis de ambiente ou um arquivo .env listado no .gitignore, como explicado em Git e GitHub para iniciantes.
  6. Disco cheio. Imagens e containers antigos se acumulam. O comando docker system prune remove o que não está em uso; leia a confirmação antes de aceitar.

Docker também é uma boa porta de entrada para entender servidores. Se for rodar containers em uma VPS, os cuidados de manutenção preventiva de servidores Linux continuam valendo.

Sites e sistemas sob medida

Ambientes reproduzíveis com Docker fazem parte de como a PruPru desenvolve e entrega sistemas para clientes. Se a sua empresa precisa de uma aplicação web bem construída, conheça os serviços.

Ver serviços →

Perguntas frequentes

Docker é a mesma coisa que máquina virtual?

Não. Uma máquina virtual roda um sistema operacional completo com kernel próprio. O container compartilha o kernel do hospedeiro e isola apenas processos, arquivos e rede, por isso é mais leve e inicia mais rápido.

Docker Desktop é gratuito?

É gratuito para uso pessoal, educacional, projetos open source e pequenas empresas dentro dos limites de funcionários e faturamento definidos pela Docker. Empresas maiores precisam de assinatura. O Docker Engine no Linux é open source.

Preciso usar Docker para aprender programação?

Não é obrigatório no começo, mas aprender o básico cedo facilita muito a vida, porque você sobe bancos e serviços sem instalar nada e aprende uma ferramenta pedida em boa parte das vagas de backend.

Qual a diferença entre docker-compose e docker compose?

O docker-compose com hífen é a versão antiga, um programa separado. O docker compose com espaço é a versão atual, integrada à linha de comando do Docker. Use a versão com espaço.

Falar no WhatsApp agora