1. Docker Image là gì?
Docker image là một read-only template chứa tất cả những gì cần thiết để chạy ứng dụng: code, runtime, libraries, environment variables và configuration files. Image là "blueprint" để tạo containers.
Layer Architecture
Docker image được xây dựng từ nhiều layers xếp chồng lên nhau. Mỗi instruction trong Dockerfile tạo ra một layer mới:
┌─────────────────────────────────┐
│ Layer 4: COPY app.js /app/ │ ← Writable (Container layer)
├─────────────────────────────────┤
│ Layer 3: RUN npm install │ ← Read-only
├─────────────────────────────────┤
│ Layer 2: RUN apt-get update │ ← Read-only
├─────────────────────────────────┤
│ Layer 1: FROM ubuntu:22.04 │ ← Read-only (Base image)
└─────────────────────────────────┘
Ưu điểm của layer architecture:
Caching: Layers được cache, chỉ rebuild layers thay đổi
Sharing: Nhiều images có thể chia sẻ base layers → tiết kiệm disk
Efficiency: Pull image chỉ tải layers chưa có trên máy
2. Docker Hub và Official Images
Docker Hub là public registry lớn nhất, chứa hàng triệu images:
Official Images: Được Docker Inc. và maintainers xác nhận (nginx, postgres, node, python...)
Verified Publisher: Images từ các vendors đã được xác minh (bitnami, grafana...)
Community Images: Images do cộng đồng đóng góp
3. Các lệnh quản lý Images
3.1. Pull images
# Pull image mới nhất (latest tag) docker pull nginxPull image với tag cụ thể
docker pull nginx:1.27-alpine docker pull postgres:16.4 docker pull node:20-slim
Pull từ registry khác
docker pull ghcr.io/owner/image:tag docker pull registry.example.com/myapp:v1.0
3.2. Liệt kê và tìm images
# Liệt kê tất cả images docker images docker image lsFilter images
docker images --filter "dangling=true" # Images không có tag docker images --filter "reference=nginx" docker images --format "{{.Repository}}:{{.Tag}} - {{.Size}}"
Tìm image trên Docker Hub
docker search nginx docker search --filter "is-official=true" postgres
3.3. Tag images
# Tag image với tên mới docker tag nginx:latest myregistry.com/nginx:v1.0 docker tag myapp:latest myapp:productionImage tagging strategies
Semantic versioning
docker tag myapp:latest myapp:1.0.0 docker tag myapp:latest myapp:1.0 docker tag myapp:latest myapp:1
Git commit hash
docker tag myapp:latest myapp:abc1234
Date-based
docker tag myapp:latest myapp:2026-03-30
3.4. Push images
# Login vào registry docker login docker login registry.example.comPush image
docker push myregistry.com/nginx:v1.0
Push tất cả tags
docker push --all-tags myregistry.com/nginx
3.5. Xem chi tiết và lịch sử
# Xem chi tiết image docker inspect nginx:latestXem lịch sử layers
docker history nginx:latest docker history --no-trunc nginx:latest
Xem manifest
docker manifest inspect nginx:latest
3.6. Xóa và cleanup
# Xóa image docker rmi nginx:latest docker image rm nginx:1.27Xóa tất cả dangling images
docker image prune
Xóa tất cả unused images
docker image prune -a
Force xóa
docker rmi -f image_id
4. Chọn Base Image phù hợp
| Base Image | Kích thước | Use case |
|---|---|---|
| ubuntu/debian | ~77MB / ~124MB | Khi cần đầy đủ package manager |
| alpine | ~7MB | Image nhỏ gọn, phù hợp production |
| slim | ~80MB | Cân bằng giữa kích thước và compatibility |
| distroless | ~20MB | Chỉ chứa app runtime, không có shell |
| scratch | 0MB | Cho static binaries (Go, Rust) |
# So sánh kích thước
docker pull node:20 # ~1.1GB
docker pull node:20-slim # ~240MB
docker pull node:20-alpine # ~130MB
5. Build Image cơ bản với Dockerfile
# Dockerfile đơn giản cho Node.js app
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
# Build image
docker build -t myapp:1.0 .
# Build với build context khác
docker build -t myapp:1.0 -f Dockerfile.prod .
# Build với build args
docker build --build-arg NODE_ENV=production -t myapp:1.0 .
6. Save, Load, Export, Import
# Save image ra file tar (backup/transfer) docker save -o nginx-backup.tar nginx:latestLoad image từ file tar
docker load -i nginx-backup.tar
Export container filesystem ra tar
docker export my-container -o container-fs.tar
Import từ tar thành image
docker import container-fs.tar myimage:imported
7. Tổng kết
Trong bài này, bạn đã nắm được:
Docker image layer architecture và cơ chế caching
Docker Hub, official images và verified publishers
Các lệnh quản lý images: pull, push, tag, rmi, prune
Cách chọn base image phù hợp (alpine, slim, distroless)
Build image cơ bản với Dockerfile
Save/load images để backup và transfer
Bài tiếp theo sẽ đi sâu vào vòng đời và quản lý Docker containers.