Konfigurasi yang tidak bergantung pada riwayat terminal
Perintah panjang mudah terlupakan saat harus menyiapkan ulang server. Dengan compose.yaml, pengaturan image, port, dan variabel lingkungan tersusun dalam kolom masing-masing. Berkas ini bisa disimpan bersama proyek agar perubahan konfigurasi lebih mudah ditinjau.
Satu perintah menghasilkan satu layanan. Konverter tidak membaca kontainer yang sedang berjalan, mengubah server, atau menebak ketergantungan antarlayanan. Hasilnya merupakan konfigurasi awal yang perlu diperiksa di lingkungan tujuan.
Cara membuat berkas Compose
Tempel perintah yang diawali docker run atau docker container run. Pertahankan tanda kutip untuk nilai yang mengandung spasi dan garis miring terbalik di akhir baris lanjutan. Nama layanan opsional hanya mengubah kunci di bawah services, bukan container_name yang berasal dari --name.
Baca catatan konversi, simpan YAML, lalu pastikan direktori dan berkas rujukannya berada di lokasi yang benar. Jalankan docker compose config untuk memeriksa konfigurasi. Layanan yang terus berjalan dapat dimulai dengan docker compose up -d.
Contoh Nginx dengan pemetaan port
Port 8080 pada host diteruskan ke port 80 di kontainer. Kebijakan restart unless-stopped tetap ada dalam YAML. Opsi -d dipilih saat menjalankan Compose, sehingga tidak ditulis sebagai pengaturan layanan.
docker run -d --name web -p 8080:80 \
--restart unless-stopped nginx:alpineservices:
web:
image: "nginx:alpine"
container_name: "web"
ports:
- "8080:80"
restart: "unless-stopped"
network_mode: "bridge"
Pastikan volume lama tetap terpakai
Volume bernama memakai nama aslinya dan ditandai external: true. Tujuannya agar Compose merujuk volume yang sudah ada, bukan membuat volume baru dengan awalan nama proyek. Untuk pemasangan baru, buat volume terlebih dahulu atau hapus penanda eksternal tersebut. Data tidak disalin oleh konverter.
Path relatif dihitung dari direktori berkas Compose. Jaringan kustom juga diperlakukan sebagai jaringan eksternal yang harus sudah ada. Tanpa opsi jaringan, hasil mempertahankan network_mode: bridge. Hapus kolom itu jika ingin memakai jaringan proyek Compose dan resolusi nama layanan.
Selesaikan ekspansi shell sebelum menempel
Masukan memakai sintaks POSIX, termasuk tanda kutip, escape, dan sambungan baris. PowerShell, CMD, pipeline, beberapa perintah, serta opsi global Docker tidak didukung. Ganti variabel dan $(pwd) dengan nilai sebenarnya. Lindungi tanda dolar literal dengan kutip tunggal atau escape; hasil Compose menggunakan $$.
--env-file ditulis dengan format: raw, sehingga memerlukan Docker Compose 2.30.0 atau lebih baru. Konverter tidak membuka berkas, memeriksa image, atau memastikan port tersedia. Lolos pemeriksaan konfigurasi belum menjamin aplikasi berhasil berjalan.
Padanan opsi Docker dalam Compose
| Opsi Docker | Kolom Compose | Fungsi |
|---|---|---|
IMAGE | image | Image dan tag tetap sama |
--name | container_name | Nama kontainer yang ditentukan |
-p, --publish | ports | Pemetaan port host ke kontainer |
-e, --env | environment | Nilai yang kosong ditentukan lingkungan eksekusi |
-v, --volume / --mount | volumes | Bind mount serta volume bernama atau anonim |
--network | networks / network_mode | Nama jaringan atau mode jaringan |
--restart | restart | Kebijakan restart |
IMAGE [COMMAND] [ARG…] | command | Argumen dipertahankan sebagai daftar |
Pertanyaan seputar konversi
Mengapa tidak ada version?
Keluaran mengikuti Compose Specification dengan services sebagai kunci teratas. Kolom version lama tidak ditambahkan. Gunakan perintah modern docker compose untuk memeriksa berkas.
Bagaimana menangani --rm?
Untuk tugas sekali jalan, gunakan docker compose run --rm --service-ports SERVICE dan ganti SERVICE dengan nama layanan. --service-ports menerapkan pemetaan port dari berkas.
Apakah opsi yang tidak didukung akan dibuang?
Tidak. Opsi seperti --gpus, --link, dan beberapa pengaturan mount lanjutan menghentikan konversi. Bagian tersebut perlu dikonfigurasi manual agar tidak hilang tanpa diketahui.
Bisa menggabungkan beberapa perintah?
Konversikan satu per satu, lalu gabungkan definisi layanannya. Sesuaikan volume bersama, jaringan, dan ketergantungan sebelum menjalankan proyek.
Apakah kata sandi dikirim ke server?
Perintah diproses di browser dan tidak diunggah. Namun nilai yang dimasukkan tetap berada di berkas hasil, jadi periksa sebelum menyimpannya ke repositori publik.
Bagaimana dengan kontainer yang sudah aktif?
Konversi tidak menjalankan operasi Docker. Saat memulai Compose, tangani benturan nama kontainer dan port yang sudah digunakan.
Dokumentasi resmi Docker: docker run · Compose · $$
