Dockerfile mendeskripsikan satu image, sedangkan compose.yaml mendeskripsikan satu aplikasi utuh — web server, database, cache, volume, dan jaringan yang menghubungkan semuanya, persis seperti lima proyek yang baru saja kita rampungkan. Kosakata berkas ini adalah kunci-kunci YAML yang sudah kita pakai intensif sepanjang Section Docker Compose dan Multi-Container Application, dan chapter ini menghimpun semuanya menjadi sembilan kelompok tabel berkolom Kunci, Tipe/contoh nilai, dan Fungsi. Satu pengingat penting sebelum mulai: kunci version: sudah obsolete — Compose modern (plugin v5.6.0 pada linimasa Course) memakai skema tunggal, sehingga baris warisan version: "3.8" pada berkas lama paling baik dihapus, persis pembahasan kita pada Chapter Struktur compose.yaml.
Kunci Top-Level #
Delapan blok berikut adalah seluruh warga yang sah di level teratas berkas. Hanya services yang wajib hadir; sisanya muncul sesuai kebutuhan aplikasi. Prefiks x- menampung anchor YAML yang disalin ke banyak service lewat merge key << — trik anti-pengulangan yang kita praktikkan pada Chapter Struktur compose.yaml:
| Kunci | Tipe / contoh nilai | Fungsi |
|---|---|---|
name | teks — katalog | Identitas project: prefix nama container, network, dan volume |
services | peta service — satu-satunya blok wajib | Cetakbiru setiap container dalam aplikasi |
networks | peta definisi — net-aplikasi: {} | Network tambahan di luar bawaan project |
volumes | peta deklarasi — db-data: {} | Named volume yang dirujuk oleh service |
configs | peta berkas — file: ./nginx.conf | Berkas konfigurasi yang disuntikkan ke service |
secrets | peta berkas — file: ./db-password.txt | Rahasia yang disuntikkan dan dibaca sebagai berkas |
include | daftar — - compose.monitoring.yaml | Menyatukan berkas Compose lain ke dalam satu project |
x-<nama> | anchor — x-umum: &umum | Gudang nilai untuk dipakai ulang lintas service |
Kunci Build dan Image #
Setiap service memulai hidupnya dari sebuah image — entah ditarik dari registry, entah dibangun dari Dockerfile lokal. Blok build adalah jembatan menuju seluruh materi Section Image Build dan Optimisasi, sedangkan pull_policy mengatur kapan daemon harus menarik ulang, materi Chapter Image, Build, dan Pull:
| Kunci | Tipe / contoh nilai | Fungsi |
|---|---|---|
image | teks — nginx:1.29-alpine | Image yang dipakai bila service tidak dibangun |
build.context | path — ./backend | Direktori build context yang dikirim ke builder |
build.dockerfile | teks — Dockerfile.prod | Nama Dockerfile alternatif di dalam context |
build.args | peta — NODE_ENV: production | Argumen build yang mengisi ARG di Dockerfile |
build.target | teks — prod | Stage multi-stage yang dijadikan image akhir |
pull_policy | missing / always / never / build | Kapan image ditarik saat up dijalankan |
Kunci Runtime Container #
Kelompok ini menimpa perilaku bawaan image pada saat container diciptakan — tugas yang pada dunia docker run diselesaikan flag-flag CLI, materi Section Konfigurasi Container. Nilai restart mengikuti empat kebijakan dari Chapter Restart Policy, sementara init menyuntikkan proses init sebagai PID 1 dari Chapter Container Init Process:
| Kunci | Tipe / contoh nilai | Fungsi |
|---|---|---|
command | daftar — ["node", "server.js"] | Menimpa CMD image |
entrypoint | daftar — ["/entrypoint.sh"] | Menimpa ENTRYPOINT image |
environment | peta — NODE_ENV: production | Variabel environment service |
env_file | daftar path — .env.services | Berkas berisi baris KEY=VALUE untuk service |
working_dir | path — /app | Menimpa WORKDIR image |
user | teks — node atau 1000:1000 | Menimpa USER image |
restart | no / on-failure[:maks] / always / unless-stopped | Kebijakan bangkit ulang container |
stop_grace_period | durasi — 30s | Masa tenggang SIGTERM sebelum SIGKILL |
stop_signal | sinyal — SIGTERM | Mengubah sinyal yang dikirim saat berhenti |
read_only | boolean — true | Mount rootfs container sebagai read-only |
tmpfs | path atau peta — /tmp | tmpfs untuk titik tulis sementara saat read-only |
cap_add / cap_drop | daftar — NET_ADMIN | Menambah / membuang Linux capabilities |
privileged | boolean — true | Melepas pembatasan capabilities, seccomp, dan LSM |
init | boolean — true | Menyuntikkan proses init sebagai PID 1 |
Kunci Jaringan #
Kelompok ini menerbitkan pintu ke host (ports), membuka pintu antar-service (expose), dan menempatkan service pada network yang benar — tiga arah lalu lintas yang kita pisahkan tuntas pada Chapter Port dan Network. Bentuk panjang ports memberi kendali penuh atas protokol dan mode, sedangkan aliases menambahkan nama panggilan di dalam satu network:
| Kunci | Tipe / contoh nilai | Fungsi |
|---|---|---|
ports (pendek) | string — "8080:80" | Menerbitkan port host:container ke luar |
ports (panjang) | peta — target: 80, published: 8080 | Bentuk eksplisit dengan protokol dan mode |
expose | daftar — 5432 | Port antar-service tanpa menerbitkan ke host |
networks | daftar/peta — net-aplikasi + aliases: [db] | Jaringan service beserta nama tambahannya |
network_mode | host / none / service:<nama> | Mode jaringan khusus tanpa network sendiri |
dns | daftar IP — 8.8.8.8 | Nameserver khusus untuk service |
Kunci Penyimpanan #
Kelompok ini menghubungkan service ke data yang harus hidup lebih lama dari container — materi Section Penyimpanan Data dalam wujud Compose. Aturan membacanya satu dan sederhana: sumber tanpa garis miring adalah named volume, sedangkan sumber yang diawali / atau ./ adalah bind mount ke jalur host — aturan yang kita buktikan pada Chapter Volume dan Bind Mount:
| Kunci | Tipe / contoh nilai | Fungsi |
|---|---|---|
volumes (named) | string — db-data:/var/lib/postgresql/data | Named volume yang dikelola daemon |
volumes (bind) | string — ./src:/app/src | Bind mount ke jalur di host |
volumes (panjang) | peta — type: bind, source: ., target: /app | Bentuk eksplisit untuk semua jenis mount |
read_only pada mount | suffiks — ./conf:/etc/nginx/conf.d:ro | Mount hanya-baca di dalam container |
Kunci depends_on #
Kunci ini menjaga urutan hidup antar-service, dan bentuknya menentukan seberapa jauh janjinya — materi lengkap Chapter depends_on dan Startup Order. Bentuk daftar hanya menunggu status Started, sedangkan bentuk peta dengan condition menunggu bukti kesiapan yang sesungguhnya:
| Kunci | Tipe / contoh nilai | Fungsi |
|---|---|---|
depends_on (daftar) | daftar — - db | Menunggu container dependensi berstatus Started |
depends_on (peta) | peta — db: condition: service_healthy | Menunggu dependensi healthy lewat healthcheck |
condition | service_started / service_healthy / service_completed_successfully | Gerbang kesiapan: jalan, sehat, atau selesai exit 0 |
Kunci healthcheck #
Blok ini menempelkan probe langsung pada service tanpa menyentuh Dockerfile image — pendekatan yang kita pilih pada Chapter Healthcheck dan Service Readiness supaya satu image bisa dipakai dengan probe berbeda di lingkungan berbeda. Nilai bawaannya sama dengan HEALTHCHECK Dockerfile: interval 30 detik, timeout 30 detik, dan 3 percobaan:
| Kunci | Tipe / contoh nilai | Fungsi |
|---|---|---|
test | daftar — ["CMD", "pg_isready"] | Perintah probe beserta bentuknya |
interval | durasi — 5s | Jarak antar probe; bawaan 30s |
timeout | durasi — 5s | Batas waktu satu probe; bawaan 30s |
retries | angka — 10 | Kegagalan beruntun sebelum unhealthy; bawaan 3 |
start_period | durasi — 30s | Masa tenggang startup yang kegagalannya tak dihitung |
start_interval | durasi — 5s | Interval probe khusus selama start_period berjalan |
Kunci develop dan watch #
Blok develop.watch mengubah Compose menjadi pengawas berkas host: setiap aturan memasangkan satu path dengan satu action, mesin sinkronisasi yang kita bedah tuntas pada Chapter Compose Watch. Aksinya menentukan berat tindakan — dari sekadar menyalin berkas sampai membangun ulang image:
| Kunci | Tipe / contoh nilai | Fungsi |
|---|---|---|
develop.watch | daftar aturan | Pemantauan berkas host milik service |
action: sync | aksi — menyalin berkas berubah ke target | Kode sumber saat aplikasi punya reload sendiri |
action: rebuild | aksi — build ulang lalu recreate | package.json dan Dockerfile yang berubah |
action: restart | aksi — restart tanpa rebuild | Berkas yang dibaca entrypoint saat start |
action: sync+restart | aksi — salin lalu restart | Kode tanpa reload server di dalam aplikasi |
path | glob — ./src | Pola berkas host yang dipantau |
target | path — /app/src | Tujuan salinan di dalam container untuk sync |
ignore | daftar glob — *.log | Pengecualian agar berkas tak ikut dipantau |
Kunci Identitas dan Skala #
Kelompok terakhir memberi nama, label, dan jumlah pada container service. Label dan hostname memudahkan penyaringan dan identitas; kedua kunci skala mengatur berapa banyak container yang berjalan untuk satu service:
| Kunci | Tipe / contoh nilai | Fungsi |
|---|---|---|
labels | peta — tim: "backend" | Label yang ditempelkan pada container service |
container_name | teks — web-tetap | Nama container tetap menggantikan prefix project |
hostname | teks — db | Nama host di dalam container |
scale | CLI — docker compose up --scale web=3 | Jumlah container per service saat dijalankan |
deploy.replicas | angka — replicas: 3 | Bentuk deklaratif jumlah replika service |
Kunci-kunci di atas menggambarkan container yang sedang atau akan berjalan — tetapi begitu stack menyala, pertanyaan berikutnya selalu tentang keadaan: hidup, berhenti, atau sedang restart. Chapter berikutnya, Container State, memetakan tujuh state resmi Docker beserta exit code dan seluruh varian status docker ps yang menampilkannya.
Referensi #
- Compose file reference — referensi resmi seluruh kunci compose.yaml beserta tipe nilainya.
- Compose Specification — spesifikasi resmi format berkas Compose.
- Docker Compose — dokumentasi Compose lengkap dengan panduan pemakaiannya.