Образ - неизменяемый шаблон (слои файловой системы + метаданные). Контейнер - запущенный экземпляр образа (читаемый слой + записываемый слой поверх). Один образ можно запустить много раз - получится несколько контейнеров. В Go собирают образ из Dockerfile (COPY бинарника или multi-stage build с компиляцией внутри).
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o /server .
FROM scratch
COPY --from=builder /server /server
ENTRYPOINT ["/server"]