Saya sudah bertahun-tahun membuat container secara manual dari command line, tetapi sekarang ingin beralih menggunakan file compose. Cara termudah membuat file compose YAML yang benar itu bagaimana? Saya dengar bisa pakai docker inspect <container ID> lalu edit output-nya, tapi hasilnya jadi file yang sangat panjang. Apakah bisa membuat file compose berdasarkan perintah command line biasa saja, sehingga sistem akan menangani sebagian besar konfigurasi lain yang muncul di output inspect?
Hai @beneix
Benar, hasil docker inspect terlalu banyak detail untuk langsung dikonversi — sebagian besar adalah status runtime dan default image yang memang tidak perlu ada di file compose. Daripada mengedit seluruh JSON, kami sarankan kamu mengekstrak hanya field yang benar-benar dibutuhkan file compose, dengan --format:
C=<container_name>
docker inspect -f '{{.Config.Image}}' $C
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' $C
docker inspect -f '{{range .Config.Env}}{{println .}}{{end}}' $C
docker inspect -f '{{range $p,$b := .NetworkSettings.Ports}}{{if $b}}{{(index $b 0).HostPort}}:{{$p}}{{println}}{{end}}{{end}}' $C
docker inspect -f '{{range .Mounts}}{{.Source}}:{{.Destination}}{{if not .RW}}:ro{{end}}{{println}}{{end}}' $C
docker inspect -f '{{range $n,$_ := .NetworkSettings.Networks}}{{println $n}}{{end}}' $C
Field-field ini langsung cocok dengan bagian image:, restart:, environment:, ports:, volumes:, dan networks: dari file compose:
services:
myapp:
image: <dari command 1>
container_name: myapp
restart: <dari command 2>
environment:
- VAR=value # dari command 3
ports:
- "8080:80" # dari command 4
volumes:
- /share/Container/myapp:/config # dari command 5
Beberapa tips supaya file tetap rapi:
-
Variable environment: command 3 menampilkan semua env var, termasuk default dari image (PATH, LANG, dkk). Salin hanya variabel yang kamu atur sendiri. Kamu bisa cek default image dengan
docker inspect -f '{{range .Config.Env}}{{println .}}{{end}}' <image>dan lewati yang muncul di keduanya. -
Command/entrypoint: jangan tambahkan
command:atauentrypoint:kecuali kamu memang mengubahnya saat membuat container. Kalaudocker inspectmenunjukkan startup command yang panjang, biasanya itu memang default dari image — biarkan saja dan image akan menangani sendiri. -
Kalau docker CLI tidak ada di PATH saat SSH, kamu bisa menemukan lokasinya dengan:
export PATH="$PATH:$(getcfg container-station Install_Path -f /etc/config/qpkg.conf)/bin" -
Validasi hasilnya dengan
docker compose configsebelum deploy, lalu jalankan dengan nama baru dan bandingkan dengan container aslinya sebelum dihapus.
Karena kamu masih punya command docker run original — itu sebenarnya sumber terbaik. File compose pada dasarnya adalah representasi YAML dari flag yang sama (-p → ports, -v → volumes, -e → environment, --restart → restart), jadi menerjemahkan command sendiri bakal menghasilkan file yang lebih bersih daripada membalik kode dari container yang sudah jalan.
Ke depan, kamu juga bisa langsung bikin aplikasi sebagai file compose di Container Station (Applications → Create), yang menghadirkan editor YAML dengan validasi bawaan — seperti yang dicontohkan NA9D di atas.
