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-alpinecomo base; - copie
index.htmlpara 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
- Abra o exemplo
examples/static-site. - Edite o
index.html. - Gere a imagem novamente.
- Rode o container.
- Confira a alteração no navegador.