Generator Docker Compose

Menulis docker-compose.yml dengan tangan berarti mengingat indentasi yang tepat, mengutip setiap pemetaan port, dan tahu string versi mana yang dipahami program Compose Anda. Generator ini memungkinkan Anda mendefinisikan service melalui field sederhana: nama, image, pemetaan port host:container, dan volume. Hasilnya file YAML valid sesuai spec Compose modern (tanpa key version) dengan default yang masuk akal.

Cara membangun file Compose

  1. 1

    Tambahkan service

    Tetapkan nama, image, pemetaan port host:container, dan volume untuk tiap service. Dua service awal sudah terisi.

  2. 2

    Ubah atau hapus baris

    Edit field apa pun langsung, tambah service lain dengan tombol + Service, atau hapus baris yang tidak perlu.

  3. 3

    Periksa YAML yang dihasilkan

    Pratinjau diperbarui saat mengetik: pemetaan port diberi tanda kutip dan key version dihilangkan, sesuai spec Compose modern.

  4. 4

    Salin file

    Salin docker-compose.yml yang dihasilkan dan tempel ke root proyek Anda.

Spec Compose modern

Compose V2 (plugin yang disertakan dengan Docker Desktop dan Docker Engine modern) mengikuti Compose Specification. Key version: sudah usang; generator menghilangkannya. Key tingkat atas adalah services, networks, volumes, configs, dan secrets.

Anatomi service

Sebuah service yang condong ke produksi tampak seperti ini:

services:
  web:
    image: nginx:1.27-alpine
    restart: unless-stopped
    ports:
      - "80:80"
    volumes:
      - ./public:/usr/share/nginx/html:ro
    depends_on:
      app:
        condition: service_healthy
    networks:
      - frontend
      - backend
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost/health"]
      interval: 30s
      timeout: 5s
      retries: 3

Volume: bind mount vs named

  • Bind mount (./app:/var/www) mengikat container ke path di host; bagus untuk pengembangan lokal karena perubahan langsung tercermin.
  • Named volume (pgdata:/var/lib/postgresql/data) dikelola Docker dan persisten tanpa bergantung pada path host mana pun; pilihan tepat untuk database dan apa pun yang tidak ingin Anda hapus tak sengaja dengan rm -rf.
  • Anonymous volume - hindari. Ia bertahan saat restart tetapi menghilang pada docker compose down -v tanpa peringatan.

Network

Secara default Compose membuat network yang dinamai sesuai proyek dan menghubungkan setiap service ke sana. Mendeklarasikan network eksplisit berguna saat:

  • Anda ingin mengisolasi database dari service yang menghadap publik.
  • Anda butuh bridge dengan subnet kustom untuk selaras dengan infrastruktur yang ada.
  • Anda ingin melampirkan container ke network eksternal yang sudah ada (external: true).

Kesalahan umum yang sebaiknya dihindari

  • Konflik key version. version: "3.8" di atas mencegah fitur lebih baru seperti start_interval healthcheck berfungsi di Compose lama; generator menghilangkan key version.
  • Kutipan port. 8080:80 terurai sebagai YAML base-60 dalam beberapa edge case; generator selalu mengutip pemetaan port.
  • Secret yang di-hardcode. Secret yang ditulis langsung di compose.yml berakhir ter-commit ke git. Simpan dalam env_file atau di tempat penyimpanan secret platform.
  • depends_on tanpa condition. depends_on: [db] biasa menunggu container mulai, bukan service siap. Gunakan condition: service_healthy dan tambahkan healthcheck pada dependensi.

Pertanyaan yang Sering Diajukan

Compose Specification saat ini (selaras dengan Docker Compose V2). File menghilangkan key version:, yang merupakan cara file Compose modern ditulis. Berfungsi dengan Docker Compose V2.22 dan yang lebih baru.

Belum lewat formulir di versi ini. Generator fokus pada definisi service dengan image, port, dan volume. Anda bisa menambahkan network, environment variable, health check, dan key lain ke YAML hasil secara manual sebelum menggunakannya.

Tidak, tool ini berfokus pada compose.yml. Untuk Dockerfile, gunakan Dockerfile Generator, yang menangani pilihan base image dan urutan COPY/RUN untuk lima stack.

Tidak. Definisi service hanya dipakai untuk membangun YAML di halaman ini. Tidak disimpan, diunggah, atau dibagikan.

Alat Terkait

Alat ini tersedia dalam bahasa lain