Where images come from
docker pull downloads an image from a registry to your local image cache. Default registry is Docker Hub (docker.io). You can use any OCI registry: GHCR, ECR, GCR, ACR, self-hosted Harbor.
Tag patterns that matter
nginx→ expands todocker.io/library/nginx:latest. Implicit. Mutable. Production poison.nginx:1.27-alpine→ version + variant. Reproducible across team. The right default.nginx@sha256:abc123...→ pinned by digest. Byte-identical. Only choice for reproducible CI/CD.
The :latest trap
:latest is just a tag name. It is whatever the publisher last pushed to that tag. It can change overnight. Two engineers on the same team using :latest can be running different code. Never use it in production. Avoid it in development too.