Saya memiliki VPS tujuan umum, dan saya Dockerising aplikasi di atasnya. Akan ada sekitar 5-6 kontainer di atasnya, dan sangat sedikit yang lain, sehingga kotak dapat dibangun kembali secara sepele sesuai kebutuhan.
Untuk setiap aplikasi saya memiliki skrip awal. Wadah WordPress terlihat seperti ini:
#!/bin/bash# Get the host IP addressexport DOCKER_HOSTIP=`ifconfig docker0 | grep "inet addr" | cut -d ':' -f 2 | cut -d ' ' -f 1`echo "Connecting to database on Docker host ${DOCKER_HOSTIP}"docker run \ --add-host=docker:${DOCKER_HOSTIP} \ --network dockernet \ --network-alias jonblog \ --detach \ --restart always \ --rm \ jonblog
Namun, itu mengembalikan kesalahan:
Opsi yang bertentangan: -- restart dan -- rm
Ada beberapa tiket Docker yang mengatakan ini masuk akal, tetapi saya tidak memahaminya. Saya pikir maksud saya jelas: jika sebuah wadah tidak berjalan (misalnya saat start-up) maka saya ingin memulainya. Jika mati maka saya berharap wadah akan dihapus, dan yang baru dibuat dari gambar dasar. Wadah harus tetap tidak dapat diubah - status apa pun yang ingin saya pertahankan, seperti file media dan log, akan ditulis ke volume.
Jadi, saya pikir saya harus menjatuhkan --restart
bendera, dan kemudian menggunakan manajer proses untuk berhenti dan mulai Docker kontainer. Bisakah Saya menggunakan Monit di sini? Saya berharap bisa melakukan sesuatu seperti:
CHECK PROCESS jonblog MATCHING jonblog START PROGRAM = "/root/docker/jonblog/host-start.sh" STOP PROGRAM = "docker stop jon-blog"
Namun, yang memeriksa tabel proses sistem, dan tidak docker ps
, sehingga tidak akan menemukan sesuatu yang cocok dengan string yang ditentukan. Bisakah saya mendapatkannya untuk exec docker ps
berkala, dan Garis pertandingan dalam output?
Saya akan dengan senang hati menggunakan alat lain jika terbukti kuat. Sebagai contoh, saya menemukan Supervisor agak kelas berat, tetapi jika itu lebih mampu bekerja dengan Docker, saya bersedia menggunakannya.
Klarifikasi tentang -- rm
Alasan mengapa saya ingin --rm
apakah selama proses Dockerisation, saya menghentikan container yang sedang berjalan, load
sebuah versi baru dari gambar, dan kembali menjalankan script di atas. Ini berarti bahwa Docker sedang diberitahu tentang restart
kebijakan untuk setiap kontainer. Saya menemukan bahwa setelah me-reboot kotak, saya akan memiliki 15 atau lebih versi aplikasi yang sedikit berbeda yang berjalan secara bersamaan, yang bukan maksudnya.
Saya kira saya bisa menggunakan docker update --restart never
pada wadah lama untuk mencegah hal ini terjadi, tetapi kemudian ketika wadah saya berhenti, saya dibiarkan tergeletak di sekitar, dan saya akan segera menghapusnya secara otomatis. Saya dapat secara berkala membersihkan yang lama menggunakan semacam pekerjaan cron, tetapi itu terasa agak hacky mengingat Docker dapat melakukannya untuk saya.
Mencari berbagai jawaban
Komentar yang sangat membantu menyarankan agar saya melihat ke Minikube, yang tampaknya menyederhanakan pengaturan Kubernetes, bahkan sampai tingkat individu yang terampil dapat berdiri dan berjalan dalam lima menit.
Saya masih ingin melihat solusi yang lebih ringan Diusulkan, jadi saya memiliki berbagai jawaban untuk dipilih. Seperti yang ditunjukkan, saya ingin mengetahui jawaban apakah supervisor proses seperti Monit akan bekerja.
Dari atas kepala saya, saya bisa menulis loop shell untuk menulis docker ps
untuk file setiap lima detik selama satu menit, dan kemudian jalankan bahwa pada Cron setiap menit. Saya kemudian dapat memindai file itu menggunakan grep
dan Monit CHECK PROGRAM
pemeriksaan sistem. Itu sedikit hacky, tetapi adalah sesuatu yang saya dapat mengerti dengan mudah jika ada masalah dengan itu. Ada kemajuan atas saran itu?