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:

KunciTipe / contoh nilaiFungsi
nameteks — katalogIdentitas project: prefix nama container, network, dan volume
servicespeta service — satu-satunya blok wajibCetakbiru setiap container dalam aplikasi
networkspeta definisi — net-aplikasi: {}Network tambahan di luar bawaan project
volumespeta deklarasi — db-data: {}Named volume yang dirujuk oleh service
configspeta berkas — file: ./nginx.confBerkas konfigurasi yang disuntikkan ke service
secretspeta berkas — file: ./db-password.txtRahasia yang disuntikkan dan dibaca sebagai berkas
includedaftar — - compose.monitoring.yamlMenyatukan berkas Compose lain ke dalam satu project
x-<nama>anchor — x-umum: &umumGudang 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:

KunciTipe / contoh nilaiFungsi
imageteks — nginx:1.29-alpineImage yang dipakai bila service tidak dibangun
build.contextpath — ./backendDirektori build context yang dikirim ke builder
build.dockerfileteks — Dockerfile.prodNama Dockerfile alternatif di dalam context
build.argspeta — NODE_ENV: productionArgumen build yang mengisi ARG di Dockerfile
build.targetteks — prodStage multi-stage yang dijadikan image akhir
pull_policymissing / always / never / buildKapan 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:

KunciTipe / contoh nilaiFungsi
commanddaftar — ["node", "server.js"]Menimpa CMD image
entrypointdaftar — ["/entrypoint.sh"]Menimpa ENTRYPOINT image
environmentpeta — NODE_ENV: productionVariabel environment service
env_filedaftar path — .env.servicesBerkas berisi baris KEY=VALUE untuk service
working_dirpath — /appMenimpa WORKDIR image
userteks — node atau 1000:1000Menimpa USER image
restartno / on-failure[:maks] / always / unless-stoppedKebijakan bangkit ulang container
stop_grace_perioddurasi — 30sMasa tenggang SIGTERM sebelum SIGKILL
stop_signalsinyal — SIGTERMMengubah sinyal yang dikirim saat berhenti
read_onlyboolean — trueMount rootfs container sebagai read-only
tmpfspath atau peta — /tmptmpfs untuk titik tulis sementara saat read-only
cap_add / cap_dropdaftar — NET_ADMINMenambah / membuang Linux capabilities
privilegedboolean — trueMelepas pembatasan capabilities, seccomp, dan LSM
initboolean — trueMenyuntikkan 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:

KunciTipe / contoh nilaiFungsi
ports (pendek)string — "8080:80"Menerbitkan port host:container ke luar
ports (panjang)peta — target: 80, published: 8080Bentuk eksplisit dengan protokol dan mode
exposedaftar — 5432Port antar-service tanpa menerbitkan ke host
networksdaftar/peta — net-aplikasi + aliases: [db]Jaringan service beserta nama tambahannya
network_modehost / none / service:<nama>Mode jaringan khusus tanpa network sendiri
dnsdaftar IP — 8.8.8.8Nameserver 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:

KunciTipe / contoh nilaiFungsi
volumes (named)string — db-data:/var/lib/postgresql/dataNamed volume yang dikelola daemon
volumes (bind)string — ./src:/app/srcBind mount ke jalur di host
volumes (panjang)peta — type: bind, source: ., target: /appBentuk eksplisit untuk semua jenis mount
read_only pada mountsuffiks — ./conf:/etc/nginx/conf.d:roMount 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:

KunciTipe / contoh nilaiFungsi
depends_on (daftar)daftar — - dbMenunggu container dependensi berstatus Started
depends_on (peta)peta — db: condition: service_healthyMenunggu dependensi healthy lewat healthcheck
conditionservice_started / service_healthy / service_completed_successfullyGerbang 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:

KunciTipe / contoh nilaiFungsi
testdaftar — ["CMD", "pg_isready"]Perintah probe beserta bentuknya
intervaldurasi — 5sJarak antar probe; bawaan 30s
timeoutdurasi — 5sBatas waktu satu probe; bawaan 30s
retriesangka — 10Kegagalan beruntun sebelum unhealthy; bawaan 3
start_perioddurasi — 30sMasa tenggang startup yang kegagalannya tak dihitung
start_intervaldurasi — 5sInterval 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:

KunciTipe / contoh nilaiFungsi
develop.watchdaftar aturanPemantauan berkas host milik service
action: syncaksi — menyalin berkas berubah ke targetKode sumber saat aplikasi punya reload sendiri
action: rebuildaksi — build ulang lalu recreatepackage.json dan Dockerfile yang berubah
action: restartaksi — restart tanpa rebuildBerkas yang dibaca entrypoint saat start
action: sync+restartaksi — salin lalu restartKode tanpa reload server di dalam aplikasi
pathglob — ./srcPola berkas host yang dipantau
targetpath — /app/srcTujuan salinan di dalam container untuk sync
ignoredaftar glob — *.logPengecualian 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:

KunciTipe / contoh nilaiFungsi
labelspeta — tim: "backend"Label yang ditempelkan pada container service
container_nameteks — web-tetapNama container tetap menggantikan prefix project
hostnameteks — dbNama host di dalam container
scaleCLI — docker compose up --scale web=3Jumlah container per service saat dijalankan
deploy.replicasangka — replicas: 3Bentuk 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 #