04 - Criando imagens com Dockerfile

June 5, 2026 · View on GitHub

Até agora usamos imagens prontas. Agora vamos criar uma imagem própria.

O que é um Dockerfile?

Dockerfile é um arquivo de texto com instruções para montar uma imagem Docker.

Um exemplo simples:

FROM nginx:1.27-alpine
COPY index.html /usr/share/nginx/html/index.html

Esse arquivo diz:

  • use a imagem nginx:1.27-alpine como base;
  • copie index.html para a pasta servida pelo Nginx.

Exemplo: site estático

Entre na pasta:

cd examples/static-site

Crie a imagem:

docker build -t docker4noobs-static-site .

Rode:

docker run --rm -p 8080:80 docker4noobs-static-site

Acesse:

http://localhost:8080

Use Ctrl+C para parar.

Anatomia de um Dockerfile

FROM

Define a imagem base:

FROM node:22-alpine

WORKDIR

Define o diretório de trabalho dentro da imagem:

WORKDIR /app

COPY

Copia arquivos da sua máquina para a imagem:

COPY package.json package-lock.json ./
COPY src ./src

RUN

Executa comandos durante o build:

RUN npm ci --omit=dev

EXPOSE

Documenta qual porta a aplicação usa:

EXPOSE 3000

Importante: EXPOSE não publica a porta automaticamente. Para acessar pela sua máquina, use -p.

CMD

Define o comando padrão do container:

CMD ["node", "src/server.js"]

Exemplo: API Node.js

Entre na pasta:

cd examples/node-api

Crie a imagem:

docker build -t docker4noobs-node-api .

Rode:

docker run --rm -p 3000:3000 docker4noobs-node-api

Teste:

curl http://localhost:3000

Cache de build

Docker usa cache para não repetir etapas iguais.

Por isso, em projetos Node.js, é comum copiar package.json antes do resto do código:

COPY package*.json ./
RUN npm ci
COPY . .

Se o código muda, mas as dependências não mudam, Docker reaproveita a camada do npm ci.

.dockerignore

.dockerignore evita copiar arquivos desnecessários para a imagem.

Exemplo:

node_modules
.git
.env
Dockerfile
README.md

Isso deixa o build mais rápido e reduz risco de enviar arquivos sensíveis.

Exercício

  1. Abra o exemplo examples/static-site.
  2. Edite o index.html.
  3. Gere a imagem novamente.
  4. Rode o container.
  5. Confira a alteração no navegador.

« 03 - Imagens e containersÍndice05 - Volumes, portas e redes »