Image #

Docker Image adalah fondasi utama dari seluruh ekosistem Docker. Setiap container yang berjalan selalu berasal dari sebuah image. Memahami image Docker secara mendalam akan membantu kamu:

  • Membuat aplikasi lebih ringan dan cepat dijalankan
  • Mengurangi bug antar environment (works on my machine 😄)
  • Meningkatkan keamanan dan efisiensi deployment
  • Mengoptimalkan CI/CD pipeline

Secara sederhana:

Docker Image = blueprint (cetakan) immutable untuk membuat Docker Container

Diagram: Hubungan Docker Image dan Docker Container #

Docker Image (Read-Only / Immutable)
┌──────────────────────────────────┐
│ Base Image (OS / Distro)         │
│ Dependency Layer                 │
│ Application Code                 │
│ Metadata (ENV, CMD, ENTRYPOINT)  │
└──────────────────────────────────┘
                │
                │ docker run
                ▼
Docker Container (Runtime Instance)
┌──────────────────────────────────┐
│ Writable Layer (Runtime Changes) │  ← log, temp file, cache
│ ──────────────────────────────── │
│ Image Layers (Read-Only)         │
└──────────────────────────────────┘

Keterangan diagram:

  • Docker Image bersifat immutable (read-only) dan tidak berubah setelah proses build.
  • Setiap instruksi di Dockerfile akan membentuk layer image yang tersusun bertumpuk.
  • Saat image dijalankan (docker run), Docker membuat container dengan satu writable layer di bagian paling atas.
  • Semua perubahan runtime (log, cache, file sementara) hanya terjadi di writable layer.
  • Jika container dihapus, perubahan tersebut hilang, tetapi image tetap aman dan dapat digunakan ulang.

Diagram ini menjadi dasar untuk memahami konsep penting seperti layer caching, multi-stage build, dan immutable deployment yang akan dibahas pada bagian selanjutnya.

Artikel ini akan membahas image Docker secara konseptual, teknis, dan praktis, lengkap dengan struktur internal, lifecycle, serta best practice di dunia nyata.

Apa Itu Docker Image? #

Docker Image adalah file system snapshot + metadata yang berisi:

  • Source code aplikasi
  • Runtime (misalnya Go binary, JVM, Node.js)
  • Dependency
  • Environment default
  • Command untuk menjalankan aplikasi

Image bersifat immutable (read-only). Ketika dijalankan, Docker akan membuat container sebagai layer writable di atas image tersebut.

📌 Analogi sederhana:

  • Image → ISO installer OS
  • Container → OS yang sedang berjalan dari ISO tersebut

Docker Image vs Docker Container #

AspekDocker ImageDocker Container
SifatImmutableMutable (runtime)
FungsiTemplateInstance yang berjalan
Dibuat dariDockerfileDocker Image
Bisa diubah
Bisa dihentikan

Satu image bisa digunakan untuk membuat banyak container sekaligus.


Struktur Internal Docker Image #

Docker image tidak berupa satu file besar, melainkan kumpulan layer.

Konsep Layer #

Setiap instruksi di Dockerfile akan menghasilkan satu layer:

FROM ubuntu:22.04        # layer 1
RUN apt install nginx    # layer 2
COPY app /app            # layer 3
CMD ["nginx"]            # metadata

Struktur ini memungkinkan:

  • Layer caching (build lebih cepat)
  • Reuse layer antar image
  • Image menjadi lebih efisien

Union File System #

Docker menggunakan UnionFS (OverlayFS), yang memungkinkan:

  • Layer disusun bertumpuk
  • Container hanya menulis di layer paling atas

📌 Jika container dihapus → perubahan hilang, image tetap aman.


Image Registry #

Docker image disimpan di registry.

Jenis Registry #

  1. Public Registry

    • Docker Hub
    • GHCR (GitHub Container Registry)
  2. Private Registry

    • Amazon ECR
    • Google Artifact Registry
    • Harbor
    • Self-hosted Docker Registry

Format Nama Image #

<registry>/<namespace>/<image>:<tag>

Contoh:

docker.io/library/nginx:1.25
123456789.dkr.ecr.ap-southeast-1.amazonaws.com/api:latest

Lifecycle Docker Image #

  1. Build

    docker build -t myapp:1.0 .
    
  2. Store (local atau registry)

  3. Push ke Registry

    docker push myapp:1.0
    
  4. Pull

    docker pull myapp:1.0
    
  5. Run sebagai Container

    docker run myapp:1.0
    

Tag dan Versioning Image #

Tag bukan hanya versi, tapi label bebas.

Contoh Tag #

  • latest
  • 1.0.3
  • 1.0.3-alpine
  • commit-sha

Best Practice Tagging #

❌ Hindari di production:

myapp:latest

✅ Gunakan:

myapp:1.4.2
myapp:1.4.2-alpine
myapp:2026-02-07

Image Size dan Dampaknya #

Ukuran image berpengaruh langsung ke:

  • Waktu build
  • Waktu pull
  • Startup container
  • Biaya storage & network

Contoh Perbandingan #

Base ImageUkuran
ubuntu~70MB
node~900MB
node:alpine~120MB
scratch~0MB
distroless~20MB

Best Practice Docker Image #

Gunakan Base Image Sekecil Mungkin #

FROM golang:1.22-alpine

Atau gunakan distroless untuk production.

Multi-Stage Build #

Menghasilkan image kecil dan aman:

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

FROM gcr.io/distroless/base-debian12
COPY --from=builder /app/app /app
CMD ["/app"]

📌 Compiler tidak ikut masuk ke image final.

Minimalkan Layer #

❌ Buruk:

RUN apt update
RUN apt install -y curl

✅ Baik:

RUN apt update && apt install -y curl && rm -rf /var/lib/apt/lists/*

Jangan Simpan Secret di Image #

❌ Salah:

ENV DB_PASSWORD=secret

✅ Benar:

  • ENV runtime
  • Docker secret
  • Kubernetes secret

Gunakan .dockerignore #

node_modules
.git
.env
logs

Menghindari:

  • Image besar
  • Kebocoran file sensitif

Scan Keamanan Image #

Gunakan:

  • Trivy
  • Snyk
  • Docker Scout

Untuk mendeteksi:

  • CVE
  • Dependency rentan

Immutable Image & Deployment Strategy #

Karena image bersifat immutable:

  • Tidak diubah setelah build
  • Update = build image baru

Strategi umum:

  • Blue-Green Deployment
  • Rolling Update
  • Canary Release

📌 Ini alasan Docker image sangat cocok untuk microservices & cloud-native.


Penutup #

Docker Image adalah:

  • Blueprint utama container
  • Immutable, reusable, dan versionable
  • Fondasi CI/CD dan cloud-native architecture

Dengan memahami:

  • Struktur layer
  • Lifecycle
  • Registry
  • Best practice

Kamu bisa membangun image Docker yang:

  • ✅ Kecil
  • ✅ Aman
  • ✅ Cepat
  • ✅ Production-grade
About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact