FROM

No Dockerfile, a instrução FROM é uma das mais importantes e obrigatórias. Ela define a imagem base a partir da qual o restante da imagem Docker será construída. Aqui está um detalhamento sobre como a instrução FROM funciona:

Sintaxe Básica

FROM <imagem-base>[:<tag>] [AS <alias>]
  • <imagem-base>: Define a imagem base que será usada para construir a nova imagem. Esta imagem pode estar disponível no Docker Hub ou em um registro privado.

  • <tag>: Opcionalmente, você pode especificar uma tag para a imagem base. Se nenhuma tag for especificada, a tag latest será utilizada por padrão.

  • [AS <alias>]: Também opcional, permite dar um nome (alias) ao estágio de construção, o que é útil em ambientes de múltiplos estágios.

Exemplo Simples

FROM ubuntu:20.04

Neste exemplo, o Dockerfile utiliza a imagem ubuntu com a tag 20.04 como base.

Imagens Multistage

Em cenários onde você deseja otimizar a imagem final (por exemplo, removendo arquivos temporários ou compilações intermediárias), você pode usar imagens de múltiplos estágios:

FROM golang:1.19 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]

Neste exemplo:

  • O primeiro estágio, chamado builder, utiliza uma imagem do Golang para compilar uma aplicação.

  • O segundo estágio usa uma imagem alpine, e apenas o binário final é copiado para essa imagem, resultando em uma imagem Docker muito menor e otimizada para produção.

Utilização de FROM scratch

Em alguns casos, especialmente quando você deseja criar uma imagem muito leve, você pode usar scratch como a imagem base. scratch é uma imagem vazia, útil para criar imagens minimalistas.

Este exemplo seria típico para aplicações Go ou C que não dependem de bibliotecas externas.

Considerações

  • A escolha da imagem base impacta diretamente o tamanho da imagem final e as dependências disponíveis.

  • Sempre use imagens oficiais e seguras como base, e considere especificar uma tag para garantir que a construção seja previsível.

Essa explicação cobre o essencial sobre a instrução FROM no Dockerfile.

Last updated