‫Perintah Pemeriksaan Kesehatan Docker. Itu adalah fitur baru yang ditambahkan dalam 1. 12, yang keluar pertengahan 2016, waktu
‫yang sama ketika Swarm Kit dan Mode Swarm tersedia di Docker. Itu ditambahkan benar-benar sebagai bagian dari
‫toolkit itu, tetapi masih berfungsi di semua file yang berbeda seperti Dockerfile, file Menulis, perintah run
‫docker menggunakannya, file Stack mendukungnya, pembaruan layanan dan layanan membuat perintah mendukungnya .
‫Di mana-mana.
‫Saya sangat merekomendasikan bahwa ketika Anda akan berproduksi, Anda melakukan opsi pengujian untuk perintah pemeriksaan
‫kesehatan ini.
‫Ini akan berfungsi langsung dari kotak dengan eksekutif.
‫Ini akan mengeksekusi perintah itu di dalam wadah seperti jika Anda menjalankan perintah exec Anda
‫sendiri.
‫Jadi, itu tidak menjalankannya dari luar wadah; itu hanya menjalankannya di dalam yang berarti bahwa
‫bahkan pekerja sederhana yang tidak memiliki port terbuka, Anda dapat menjalankan perintah sederhana di dalamnya untuk memvalidasi apakah mereka
‫mengembalikan data yang baik atau apa pun.
‫Ini adalah eksekusi sederhana dari sebuah perintah, yang berarti mendapat pengembalian sederhana. Diharapkan 0 atau 1.
‫Di Linux dan Windows, Anda memiliki kode keluar dari perintah dan 0 adalah hal yang baik.
‫Itu berarti semuanya baik-baik saja.
‫Apa pun selain 0 akan menjadi kesalahan di sebagian besar aplikasi.
‫Tetapi di Docker, kita membutuhkan aplikasi itu untuk keluar dari 1 secara khusus. Kami akan menunjukkan sebentar lagi bagaimana
‫Anda melakukannya.
‫Hanya ada tiga negara bagian untuk pemeriksaan kesehatan di Docker. Dimulai dengan memulai. Memulai adalah 30 detik pertama,
‫secara default, di mana ia belum menjalankan perintah cek kesehatan.
‫Maka itu akan menjalankan satu.
‫Jika itu mengembalikan 0, itu akan mulai dengan yang sehat. Itu akan berubah ke opsi sehat.
‫Itu akan mengambil perintah itu dan akan menjalankannya setiap 30 detik secara default lagi. Jika pernah menerima pengembalian yang tidak sehat, seperti
‫pintu keluar 1, maka itu menandainya sebagai wadah yang tidak sehat.
‫Kami memiliki opsi untuk mengendalikan semua ini termasuk coba lagi.
‫Kita akan melihatnya sebentar lagi.
‫Ini adalah pilihan yang jauh lebih baik daripada yang kami miliki di masa lalu karena Docker, sampai sekarang,
‫hanya memastikan aplikasi itu masih berjalan.
‫Itu tidak memiliki wawasan tentang apakah aplikasi itu melakukan apa yang seharusnya.
‫Sekarang kita bisa melakukannya di dalam wadah Docker itu sendiri.
‫Tetapi ini bukan pengganti untuk solusi pemantauan pihak ketiga Anda.
‫Ini tidak akan memberi Anda grafik, atau status seiring waktu, atau segala jenis perkakas pihak ketiga yang Anda
‫harapkan dari solusi pemantauan.
‫Ini tentang pengertian Docker jika wadah itu sendiri memiliki tingkat kesehatan dasar.
‫Jadi, dalam Nginx, itu mungkin mengembalikan localhost dari file indeks root. Pengembalian 200 atau 300 baik-baik saja dan memberinya kode
‫keluar 0, dan menganggapnya sehat.
‫Itu bukan alat pemantauan yang canggih, Anda tahu.
‫Tetapi jika itu mengembalikan kesalahan 404 atau 500, maka itu akan menganggapnya tidak sehat dan kita dapat melakukan sesuatu
‫tentang itu.
‫Di mana kita akan melihat pemeriksaan kesehatan Docker ini di GUI?
‫Tempat pertama adalah dalam wadah ls.
‫Itu hanya akan melihatnya sebagai opsi baru ini.
‫Itu di tengah. Kita akan lihat sebentar lagi di mana itu akan menunjukkan kepada kita salah satu dari
‫tiga negara bagian jika pemeriksaan kesehatan berjalan, dan itulah bagaimana kita sebenarnya tahu bahwa ada pemeriksaan kesehatan.
‫Setidaknya itulah cara termudah untuk mengetahuinya. Kita akan melihat sejarah, lima terakhir dari
‫pemeriksaan kesehatan itu, muncul di inspeksi untuk wadah itu. Dan kita dapat melihat beberapa tren dasar dari waktu ke waktu di sana.
‫Tetapi perintah docker run tidak mengambil tindakan pada wadah yang tidak sehat.
‫Setelah pemeriksaan kesehatan menganggap wadah tidak sehat, buruh pelabuhan hanya akan menunjukkan bahwa dalam perintah ls,
‫dan dalam pemeriksaan, tetapi tidak akan mengambil tindakan.
‫Di situlah kami mengharapkan Layanan Swarm untuk mengambil tindakan.
‫Jadi tumpukan dan layanan benar-benar akan menggantikan wadah itu dengan tugas baru, pada host baru mungkin,
‫tergantung pada penjadwal.
‫Bahkan dalam perintah pembaruan, kami melihat sedikit bonus tambahan dengan menggunakan pemeriksaan kesehatan karena pembaruan
‫akan mempertimbangkan pemeriksaan kesehatan sebagai bagian dari kesiapan untuk wadah itu sebelum pergi dan mengubah
‫yang berikutnya.
‫Jika sebuah wadah muncul, tetapi tidak lulus pemeriksaan kesehatannya, maka pembaruan layanan tidak akan
‫pergi ke yang berikutnya. Atau itu akan mengambil tindakan berdasarkan perubahan yang Anda berikan.
‫Mari kita lihat beberapa contoh sebelum kita pergi ke baris perintah.
‫Ini adalah salah satu yang kami gunakan pada docker run.
‫Ini memungkinkan kami untuk menggunakan gambar yang ada yang tidak memiliki pemeriksaan kesehatan di dalamnya, dan
‫kami menambahkan pemeriksaan kesehatan saat runtime.
‫Dalam hal ini, kami menggunakan gambar Elasticsearch. Anda dapat melihat perintahnya adalah cURL localhost 9200,
‫yang merupakan port tempat Elasticsearch berjalan di dalam container, bukan port yang dipublikasikan, tetapi di
‫dalam container. Untuk Elasticsearch,
‫ada URL kesehatan aktual.
‫Jadi, kita bisa menggunakannya di sini.
‫Anda akan melihat dua pipa dengan false di akhir perintah itu.
‫Dan itu akan menjadi
‫sangat umum jika menggunakan sesuatu seperti cURL atau alat lain yang akan mengirimkan kode kesalahan selain 1.
‫Ingat ketika saya menyebutkannya beberapa waktu lalu? Kami membutuhkannya untuk keluar dengan 1 jika ada masalah. Karena itulah satu
‫kode kesalahan yang akan dilakukan Docker terhadap sesuatu.
‫Kita perlu memastikan bahwa dalam kasus ini, shell akan selalu mengembalikan kode keluar 1 palsu jika ada
‫sesuatu yang keluar dari perintah itu selain 0.
‫Ini cara yang bagus untuk mengatasi masalah itu.
‫Kebetulan dengan cURL, cURL akan memberikan kode kesalahan potensial lainnya dan kami tidak ingin
‫melakukannya.
‫Dalam file Docker yang sebenarnya, kita dapat menambahkan perintah yang sama. Formatnya sedikit berbeda. Tetapi Anda melihat
‫bahwa kami memiliki opsi-opsi ini di sini. Kami memiliki interval, batas waktu, periode mulai (yang baru), dan coba lagi.
‫Intervalnya adalah apa yang Anda pikirkan. Secara default, setiap 30 detik.
‫Seberapa sering menjalankan pemeriksaan kesehatan ini. Batas waktu adalah berapa lama menunggu sebelum kesalahan
‫keluar dan mengembalikan kode yang buruk, jika mungkin aplikasinya lambat. Periode mulai adalah fitur baru yang
‫memungkinkan kita sekarang di 17 09 dan yang lebih baru, untuk memberikan periode menunggu yang lebih lama dari 30 detik pertama durasi. Sebelumnya, selalu menunggu lama
‫... interval waktu sebelum memulai pemeriksaan kesehatan.
‫Tetapi mungkin Anda memiliki aplikasi Java, atau database, atau sesuatu yang membutuhkan waktu lebih lama untuk memulai.
‫Mungkin butuh lima menit.
‫Anda dapat menambahkan periode mulai di sana. Masih akan melakukan pemeriksaan kesehatan. Tetapi apa yang akan
‫dilakukannya adalah tidak akan mengkhawatirkan cek yang tidak sehat sampai waktu tersebut berlalu.
‫Jadi, jika Anda menetapkan dua menit di sana, meskipun memeriksa kesehatan setiap 30 detik, itu hanya akan menganggapnya
‫tidak sehat setelah melewati tanda dua menit itu. Yang terakhir di sana, coba lagi,
‫artinya kami akan mencoba pemeriksaan kesehatan ini beberapa kali sebelum kami menganggapnya tidak sehat.
‫Itu mungkin memberikan aplikasi yang berpotensi tidak stabil kesempatan untuk kembali dengan sehat dan pulih
‫sendiri sebelum kita menganggap ini wadah yang benar-benar tidak sehat.
‫Perintah pemeriksaan kesehatan dasar yang akan Anda gunakan dalam
‫Dockerfile disebut HEALTHCHECK, semua huruf kapital di sana. Format yang sama ada di mana jika kita hanya melakukan cURL sederhana dari localhost
‫karena mungkin itu aplikasi PHP atau apalah. Kita bisa melakukannya.
‫Ini adalah bagaimana Anda akan menambahkan semua opsi ke Dockerfile sehingga Anda akan melihat
‫bagaimana saya menambahkan interval waktu habis dan coba lagi sebelum perintah itu sendiri.
‫Yang pertama di sana untuk perintah dasar, perhatikan saya tidak harus memasukkan CMD jika
‫saya hanya memberikan perintah untuk menjalankannya. Tetapi jika saya ingin menunjukkan opsi, jika saya ingin
‫memberikan opsi khusus di luar kotak dengan batas waktu dan seterusnya, maka saya harus menentukan yang mana adalah perintah.
‫Sekarang ini bukan dua baris yang berbeda.
‫Perhatikan garis miring di ujung baris pertama di sana.
‫Jadi jangan bingung.
‫Di sini kita memiliki contoh sederhana tentang bagaimana rasanya jika Anda memiliki aplikasi statis yang berjalan di
‫dalam server Nginx.
‫Anda dapat mengatur interval dan waktu dari Dockerfile Anda, dan Anda hanya
‫perlu melakukan perintah cURL di localhost.
‫Jika mengembalikan 200 atau 300, itu dianggap baik-baik saja. Jika mengembalikan 4, atau 5, atau yang lain, itu menganggap
‫itu kesalahan.
‫Anda perhatikan di sini bahwa saya memiliki jalan keluar 1, yang merupakan hal yang sama dengan yang salah.
‫Saya melakukan itu hanya untuk menunjukkan kepada Anda bahwa contoh-contoh tertentu di Internet akan memiliki kesalahan. Contoh-contoh tertentu akan memiliki jalan
‫keluar 1.
‫Mereka berdua melakukan hal yang sama.
‫Ini contoh yang sedikit lebih maju.
‫Dalam hal ini, kami menggunakan aplikasi PHP yang dikombinasikan dengan Nginx.
‫Apa yang saya lakukan adalah, di sumber daya, Anda akan menemukan tautan ke contoh PHP ini. Saya telah menambahkan file konfigurasi
‫Nginx khusus yang menggunakan URL status Nginx dan PHP-FPM.
‫Kedua aplikasi tersebut memiliki halaman status masing-masing dan semacam URL pemeriksaan kesehatan.
‫Anda dapat menggunakannya di aplikasi jika menggunakan PHP atau Nginx. Ada dua URL yang berbeda, tetapi Anda
‫bisa menggunakan keduanya di dalam cek kesehatan yang sama.
‫Dalam hal ini, kami hanya menggunakan salah satunya, dan kami melemparkan localhost / ping,
‫yang sebenarnya merupakan
‫perintah status PHP-FPM, tetapi Anda harus mengaktifkannya di dalam PHP-FPM Anda. Sekali lagi, di sumber kuliah ini, ada
‫tautan ke PHP Docker Good Defaults
‫Anda bisa memeriksanya di GitHub di mana saya telah menunjukkan dalam contoh ini sedikit lebih detail.
‫Selanjutnya kita memiliki contoh Postgres sehingga di Dockerfile saya dapat menggunakan URL yang berbeda.
‫Di sini kita memiliki aplikasi Postgres di mana di perintah cek kesehatan, saya menggunakan perintah pg sudah.
‫Sekarang, dengan aplikasi yang berbeda, ada alat yang berbeda. Dengan Postgres, ia hadir dengan alat bawaan,
‫itu adalah pengujian yang sangat sederhana untuk koneksi ke server Postgres.
‫Itu tidak memvalidasi bahwa Anda memiliki data yang baik, atau bahwa database Anda dipasang dengan benar. Ini hanya akan mengatakan, 'Apakah server basis
‫data ini memungkinkan koneksi? Ya atau tidak? “Itu yang rapi
‫yang bisa kamu lakukan di luar kotak.
‫Ini akan terlihat seperti apa dalam file komposer / tumpukan.
‫Sangat mirip.
‫Anda akan melihat bahwa periode mulai di sana memerlukan versi yang berbeda.
‫Sejak perintah cek kesehatan keluar pada 1. 12, sebenarnya didukung dalam 2. 1 file Tulis ini.
‫Tetapi, jika Anda akan menggunakan periode mulai, itu berarti Anda harus memperbarui file Tulis
‫ke versi 3. 4 untuk mendukung itu. Karena periode mulai keluar lebih
‫dari setahun kemudian setelah perintah pemeriksaan kesehatan melakukannya.
‫Mari kita mulai dengan beberapa perintah jalankan sederhana.
‫Apa yang akan kita lakukan di sini adalah kita akan memulai server database Postgres tanpa pemeriksaan kesehatan karena
‫secara default, itu tidak datang dengan satu.
‫Kemudian kita akan menjalankannya lagi dengan perintah pemeriksaan kesehatan
‫manual yang akan ditambahkan pada baris perintah, dan kita akan melihat perbedaannya.
‫Di sini, kita hanya akan memanggil yang pertama p1. Kami akan menjalankannya terlepas dari gambar resmi
‫Postgres.
‫Jika saya membuat wadah buruh pelabuhan, Anda akan melihat bahwa tidak ada yang menunjukkan pemeriksaan kesehatan di sini.
‫Jika kita melakukan perintah yang sama lagi, dan menyebutnya p2 kali ini, kita akan menambahkan perintah kesehatan.
‫Kali ini, kita akan menggunakan pg isready, yang telah kita bicarakan sebelumnya, untuk menguji
‫apakah koneksi tersedia di server Postgres ini. Kita akan mengatakan bahwa pengguna yang kita
‫butuhkan adalah pengguna postgres. Kami sebenarnya tidak perlu memberikannya kata sandi. Itu tidak
‫akan mencoba masuk. Itu hanya akan mencoba untuk memvalidasi. Kami akan menggunakan gambar Postgres.
‫Sekarang jika kita melakukan kontainer buruh pelabuhan, dan saya memperkecil sedikit, Anda akan melihat bahwa katanya, 'Sampai 4 detik kesehatan
‫mulai. 'Sekarang kita
‫mendapatkan fitur tambahan ini dalam status perintah ls kita. Ini akan tetap dalam status awal selama
‫30 detik default
‫sampai menjalankan perintah cek kesehatan untuk pertama kalinya.
‫Sekarang kami telah menunggu lebih dari 30 detik, Anda akan melihat bahwa itu berubah menjadi status sehat.
‫Jika kita melakukan buruh pelabuhan memeriksa p2 itu, kita akan melihat di bagian paling atas bahwa kita memiliki opsi
‫status kesehatan baru ini. Dalam hal ini, saya hanya bisa menjalankannya dua kali.
‫Anda dapat melihat output di sana, bahwa itu menunjukkan itu menerima koneksi.
‫Baiklah. Mari kita lakukan beberapa layanan membuat perintah ke database yang sama, dalam pemeriksaan kesehatan tes yang sama.
‫Apa yang akan kita lihat di sini ketika kita melakukan ini adalah bahwa ada tiga keadaan berbeda yang harus dilalui sebuah
‫layanan saat memulai.
‫Sedang dipersiapkan, yang biasanya berarti mengunduh gambar. Itu mulai, yang berarti sedang menjalankan wadah dan
‫membawanya ke atas. Lalu berjalan.
‫Tanpa perintah pemeriksaan kesehatan, memulai dan menjalankan sangat cepat. Mereka hampir seketika.
‫Kita akan melihat bahwa di sini dengan layanan buruh pelabuhan membuat nama p1 postgres.
‫Setelah selesai menyiapkan dengan mengunduh gambar, Anda akan melihat bahwa itu berjalan langsung dari
‫mulai berjalan, karena tidak ada pemeriksaan kesehatan. Tidak ada hal lain yang harus dilakukan selain memulai wadah dan
‫berkata, 'Ya. Biner sedang berjalan. 'Tetapi jika kita
‫melakukan perintah yang sama, layanan buruh pelabuhan membuat, dan menyebutnya p2 seperti sebelumnya, dan memberikannya perintah kesehatan yang
‫sama.
‫Kami memulai layanan ini dengan perintah cek kesehatan bawaan.
‫Apa yang akan kita lihat adalah bahwa itu akan berubah dari persiapan menjadi awal, dan itu akan duduk
‫di keadaan awal selama 30 detik default sampai pemeriksaan kesehatan pertama berjalan.
‫Ini sekarang adalah layanan Docker yang mengharapkan kondisi yang sehat sebelum menganggap layanan
‫ini sepenuhnya berjalan. Setelah 30 detik selesai, itu akan beralih ke kondisi berjalan. Lalu kami mendapatkan verifikasi terakhir di
‫sana, hanya untuk memastikan bahwa itu dianggap stabil, dan kemudian kami selesai.
‫Anda sudah dapat melihat, di luar kotak, bahwa dengan layanan, serta pembaruan
‫layanan, kita akan mendapatkan bonus konsep kesehatan tambahan ini jika kita menggunakan perintah ini kapan saja kita bisa.