Docker Compose memungkinkan Anda menentukan tumpukan container yang dapat Anda kelola secara kolektif. Ini adalah alat yang relatif sederhana yang awalnya berfokus pada instalasi Docker lokal.
Kubernetes adalah orkestra wadah yang dilengkapi dengan rantai alat dan file manifesnya sendiri. Biasanya terlihat lebih kompleks daripada alur kerja Docker biasa, tetapi kemampuannya memfasilitasi penerapan container skalabel dalam produksi.
Kompose adalah alat yang memungkinkan Anda mengambil file Docker Compose dan menyebarkannya ke cluster Kubernetes. Ini dikembangkan sebagai bagian dari proyek Kubernetes.
Versi Kompose saat ini terbatas pada konversi file YAML. Anda harus menerapkan manifes sumber daya Kubernetes yang dikonversi ke cluster Anda menggunakan alat seperti Kubectl. Versi Kompose yang lebih lama memiliki up
bawaan perintah yang dapat diterapkan langsung ke cluster Anda tanpa langkah konversi perantara. Ini telah dihapus karena meningkatnya kompleksitas teknis.
Memulai
Kompose tersedia untuk Windows, macOS, dan distribusi Linux paling populer. Binari yang dibuat sebelumnya tersedia dari repositori GitHub-nya. Unduh rilis terbaru, atur bit izin yang dapat dieksekusi, dan pindahkan biner ke direktori yang ada di jalur Anda. Beberapa pengelola paket juga didukung.
curl -L https://github.com/kubernetes/kompose/releases/download/v1.23.0/kompose-linux-amd64 -o komposechmod +x komposesudo mv ./kompose /usr/local/bin/komposeCoba jalankan
kompose
di terminal Anda. Anda akan melihat beberapa informasi dasar tentang perintah yang tersedia. Menjalankankompose version
memeriksa versi Kompose yang Anda gunakan.
Sekarang, pastikan Anda memiliki
docker-compose.yml
berkas tersedia. Berikut adalah contoh dasar yang menyiapkan server web Apache dengan database MySQL:versi:"3" layanan:apache:image:httpd:port terbaru:- 80:80 mysql:image:mysql:ekspos terbaru:- 3306 volume:- mysql:/var/lib/mysqlvolumes:mysql:Anda juga memerlukan cluster Kubernetes untuk di-deploy. Buat cluster baru dengan penyedia cloud publik atau buat cluster Anda sendiri menggunakan project seperti MicroK8s.
Mengonversi Tumpukan Anda
kompose convert
perintah menerima jalur ke file Docker Compose dan memancarkan manifes sumber daya Kubernetes yang setara. Ia menggunakandocker-compose.yml
di direktori kerja Anda ketika tidak ada jalur yang diberikan. Beberapa file diterima melalui-f
bendera.kompose convert -f docker-compose.yml -f docker-compose-dev.ymlAnda akan melihat beberapa baris output saat Kompose menulis file manifes untuk setiap sumber daya di tumpukan Compose Anda. File individual dibuat untuk setiap komponen
docker-compose.yml
. Anda . Mereka akan ditempatkan ke direktori kerja Anda.Berikut hasil konversi
docker-compose.yml
ditunjukkan di atas:
Penerapan dan layanan Kubernetes telah dibuat untuk setiap layanan Compose. Resource ini menentukan Pod yang akan dibuat serta aturan perutean jaringannya.
PersistentVolumeClaim juga ada untuk wadah MySQL. Ini mewakili volume yang dikonfigurasi di
docker-compose.yml
, menyediakan penyimpanan persisten untuk database MySQL yang bertahan lebih lama dari setiap Pod.Jika Anda memeriksa file YAML, Anda akan melihat bahwa itu hanyalah manifes Kubernetes biasa yang kompatibel dengan Kubectl. Berikut
apache-deployment.yaml
yang dikonversi berkas:apiVersion:apps/v1kind:Deploymentmetadata:annotations:kompose.cmd:kompose convert kompose.version:1.23.0 (bc7d9f4f) creationTimestamp:null labels:io.kompose.service:Apache name:Apachespec:replicas:1 selector:matchLabels:io.kompose.service:apache strategy:{} template:metadata:annotations:kompose.cmd:kompose convert kompose.version:1.23.0 (bc7d9f4f) creationTimestamp:null labels:io.kompose.service:Apache spec:containers :- gambar:httpd:nama terbaru:port apache:- containerPort:80 sumber daya:{} restartPolicy:Alwaysstatus:{}
spec
penerapan ini sangat mirip dengan definisi wadah Apache didocker-compose.yml
asli . Dalam hal layanan sederhana ini, layanan ini dengan mudah dipetakan ke objek Kubernetes. Sisa file sebagian besar mengatur metadata, termasuk anotasi khusus Kompose yang memungkinkan Anda mengidentifikasi sumber daya yang dibuat dengan alat tersebut.Menyebarkan ke Cluster Anda
Deploy kumpulan file manifes dengan cara biasa dengan
kubectl apply
. Sebaiknya simpan di direktori terpisah kedocker-compose.yml
Anda , sehinggakubectl
tidak mencoba memilih file yang tidak kompatibel itu juga.kubectl berlaku .Sumber daya akan disediakan di dalam cluster Anda. Mungkin perlu beberapa menit agar layanan Anda berjalan. Periksa penerapan Anda dengan
kubectl get deployments
. SaatAVAILABLE
kolom menunjukkan1
, beban kerja Anda harus dapat diakses.
Sekarang, Anda dapat memperbarui penerapan Anda dengan mengedit manifes yang dihasilkan dan menjalankan kembali
kubectl apply
. Jika Anda ingin menskalakan Apache menjadi tiga replika, bukaapache-deployment.yaml
, ubahreplicas
bidang ke3
, dan terapkan manifes yang dimodifikasi.Anda juga dapat terus memperbarui file Tulis Docker Anda. Jalankan
kompose convert
lagi untuk mendapatkan interpretasi Kubernetes terbaru dari kontennya, dan kemudian menerapkan kembali output ke cluster Anda. Ketahuilah bahwa ini akan menimpa setiap perubahan yang telah Anda terapkan secara manual sejak itu.Batasan
Kompose biasanya bekerja dengan baik dengan file Docker Compose menggunakan fitur paling umum dan praktik terbaik. Itu dapat membuat container, mengekspos port, dan menyediakan penyimpanan persisten melalui volume.
Namun, tidak setiap konversi akan sempurna. Beberapa kemampuan Compose tidak memiliki padanan langsung di dunia Kubernetes, sementara yang lain akan memetakan dengan cara yang mungkin tidak memenuhi kebutuhan Anda. Penggunaan penerapan dan layanan dalam contoh ini adalah salah satunya—jika Anda menerapkan langsung ke Kubernetes, Anda mungkin menggunakan aturan Ingress untuk mengekspos layanan Anda, tetapi ini tidak dibuat oleh Kompose. Keputusan beropini diselesaikan dengan mengambil opsi yang paling sederhana.
Anda juga akan mengalami masalah seputar volume. File Docker Compose dapat mengikat file dan folder mount dari Host ke dalam wadah. Ini tidak mungkin dilakukan dengan Kubernetes, jadi Anda memerlukan solusi alternatif. Selain itu, meskipun Kompose dapat membuat sumber daya untuk PersistentVolumeClaims, itu tidak akan membuat PersistentVolumes yang sebenarnya. Anda harus memiliki volume yang sudah tersedia dalam kluster sebelum mencoba menerapkan manifes.
Tabel lengkap fitur yang didukung dan detail konversi ditawarkan sebagai bagian dari dokumentasi Kompose. Sebaiknya periksa apakah fitur Docker Compose yang Anda gunakan didukung sebelum Anda memulai upaya konversi apa pun.
Kesimpulan
Kompose menyederhanakan migrasi dari Docker Compose ke cluster Kubernetes. Ini mengotomatiskan langkah-langkah yang sebelumnya membosankan, memakan waktu, dan rawan kesalahan. Ini adalah bantuan yang baik, meskipun bukan alat yang harus dijalankan tanpa tingkat pengawasan.
Konversi komposisi tidak berlaku secara universal, sehingga tidak akan cocok untuk semua lingkungan. Itu selalu layak untuk memeriksa manifes yang dipancarkan sebelum Anda menerapkannya ke cluster Anda. Dalam beberapa kasus, sebaiknya gunakan Kompose sebagai referensi—konversi
docker-compose.yml
Anda , lihat hasilnya, lalu gunakan itu sebagai titik awal untuk membuat manifes yang sepenuhnya kompatibel dengan aplikasi dan cluster Anda.
Cara Menjalankan PHPMyAdmin di Wadah Docker Cara Menggunakan Rsync dan SSH di Pipeline GitLab CI DockerizedDocker