Paket 1 · Fondasi DevOpsModul I — Docker & Containerization

Docker Architecture: Image, Container, Network, dan Volume

Memahami komponen Docker, siklus hidup container, jaringan, volume, registry, serta perintah dasar yang wajib dikuasai.

Docker mengemas aplikasi beserta dependensinya ke dalam container yang ringan dan konsisten. Modul ini membahas arsitektur Docker dan komponen utamanya sebelum Anda menulis Dockerfile.

Container vs VM

AspekContainerVM
KernelBerbagi kernel hostKernel sendiri
UkuranPuluhan–ratusan MBGB
BootDetikPuluhan detik
IsolasiProcess-level (namespace, cgroup)Hardware-level
KepadatanTinggiLebih rendah

Container bukan VM kecil

Container adalah proses yang diisolasi, bukan sistem operasi lengkap. Karena berbagi kernel, container lebih ringan tetapi isolasi keamanannya berbeda dari VM.

Arsitektur Docker

docker CLI ──API──▶ dockerd (daemon) ──▶ containerd ──▶ runc
       │                  │
       │                  ├── Images
       │                  ├── Containers
       │                  ├── Networks
       │                  └── Volumes
       ▼
   Docker Registry (Docker Hub, GHCR, private)
KomponenFungsi
Docker CLIPerintah yang Anda jalankan
dockerdDaemon yang mengelola container
containerdRuntime container
runcMembuat dan menjalankan container
RegistryMenyimpan dan mendistribusikan image

Image

Image adalah template read-only berisi filesystem dan metadata aplikasi.

docker pull nginx:alpine
docker images
docker image inspect nginx:alpine
docker rmi nginx:alpine

Image terdiri dari layer. Setiap instruksi Dockerfile membuat layer yang di-cache.

PerintahFungsi
docker pullMengunduh image
docker imagesDaftar image lokal
docker rmiMenghapus image
docker historyMelihat layer image

Container

Container adalah instance image yang berjalan.

docker run -d --name web -p 8080:80 nginx:alpine
docker ps
docker ps -a
docker logs -f web
docker exec -it web sh
docker stop web
docker start web
docker rm web
Opsi docker runFungsi
-dDetached (background)
--nameNama container
-p host:containerPemetaan port
-vMount volume
-eEnvironment variable
--restartKebijakan restart
--networkJaringan container

Siklus hidup

created → running → paused → stopped → removed
docker create nginx:alpine
docker start <container>
docker pause <container>
docker unpause <container>
docker stop <container>
docker rm <container>

Network

Docker menyediakan jaringan internal agar container bisa saling berkomunikasi.

DriverFungsi
bridgeDefault, NAT ke host
hostBerbagi network host
noneTanpa jaringan
overlayMulti-host (Swarm)
macvlanIP langsung di jaringan fisik
docker network ls
docker network create app-net
docker run -d --name db --network app-net postgres:16
docker run -d --name api --network app-net -p 3000:3000 myapp
docker network inspect app-net

Di jaringan yang sama, container bisa saling mengakses dengan nama container sebagai hostname:

docker exec -it api sh
# di dalam container:
# ping db
# curl http://db:5432

Volume

Data di dalam container hilang saat container dihapus. Volume menyimpan data secara persisten.

JenisContohCatatan
Named volumeapp-data:/var/lib/postgresql/dataDikelola Docker
Bind mount./html:/usr/share/nginx/htmlLangsung ke path host
tmpfs/tmpDisimpan di RAM
docker volume create app-data
docker volume ls
docker volume inspect app-data
docker run -d --name db -v app-data:/var/lib/postgresql/data postgres:16
docker volume rm app-data

Jangan simpan data penting hanya di container

Selalu gunakan volume atau bind mount untuk database, upload, dan konfigurasi yang harus bertahan. Hapus container dengan hati-hati agar tidak menghapus volume yang masih dipakai.

Registry

Registry menyimpan image agar bisa diambil server lain.

docker login
docker tag myapp:latest username/myapp:1.0.0
docker push username/myapp:1.0.0
docker pull username/myapp:1.0.0

Registry populer: Docker Hub, GitHub Container Registry (GHCR), GitLab Registry, dan registry privat.

Perintah pembersihan

docker system df
docker system prune
docker system prune -a
docker image prune
docker volume prune
docker container prune

prune bisa menghapus data

docker system prune -a --volumes dapat menghapus image dan volume yang tidak dipakai. Pastikan Anda memahami dampaknya sebelum menjalankannya di server produksi.

Instalasi Docker

Gunakan repository resmi Docker, bukan paket distro yang mungkin tertinggal versi.

curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
docker version
docker info

Tambahkan user ke group docker agar tidak perlu sudo:

usermod -aG docker deploy
newgrp docker

Group docker setara root

Anggota group docker dapat mengakses host secara efektif sebagai root. Berikan hanya kepada user yang tepercaya.

Praktik: menjalankan Nginx

# 1. Jalankan container
docker run -d --name web -p 8080:80 nginx:alpine

# 2. Cek status
docker ps

# 3. Lihat log
docker logs web

# 4. Uji
curl -I http://localhost:8080

# 5. Masuk ke container
docker exec -it web sh
# ls /usr/share/nginx/html
# exit

# 6. Hentikan dan hapus
docker stop web
docker rm web

Ringkasan

  • Docker mengemas aplikasi dalam container yang berbagi kernel host.
  • Image adalah template; container adalah instance yang berjalan.
  • Network memungkinkan komunikasi antar-container; volume menyimpan data persisten.
  • Registry mendistribusikan image ke server lain.
  • Pahami perintah dasar dan risiko prune sebelum dipakai di produksi.

Selanjutnya

Bangun image dan jalankan stack di Dockerfile, Docker Compose, dan Application Deployment.

On this page