Pertimbangan tambahan - AWS Bimbingan Preskriptif

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pertimbangan tambahan

Bagian ini mencakup pertimbangan umum tentang containerization Java yang tidak spesifik untuk aplikasi Java EE.

Gunakan gambar dasar kecil

Kami menyarankan Anda membuat gambar dasar kecil (kurang dari 500 MB) dan terawat dengan baik. Mengurangi ukuran gambar dasar mengurangi biaya jaringan dan pengoperasian Anda. Gambar dasar yang lebih kecil juga dapat meningkatkan keamanan dengan mengurangi jumlah komponen yang dapat dieksploitasi. Anda dapat menggunakan salah satu gambar distroless berdasarkan Debian. Gambar memiliki jumlah minimum alat yang diinstal pada mereka dan tidak berisi manajer paket atau shell. Gambar-gambar distroless ini juga mengurangi keseluruhan permukaan serangan. Gambar distroless bisa lebih kecil dari 150 MB. Untuk informasi lebih lanjut, lihat repositori Gambar GitHub Kontainer “Distroless”.

Ini adalah praktik terbaik untuk mengikuti prinsip sekali pakai dan mengembangkan waktu startup yang cepat untuk gambar kontainer Anda. Dengan menggunakan teknik seperti ahead-of-time-compilation(dokumentasi OpenJDK) atau berbagi data kelas aplikasi (dokumentasi OpenJDK), Anda dapat meningkatkan waktu startup secara keseluruhan dengan mengkompilasi kelas Java ke kode asli sebelum meluncurkan mesin virtual dan dengan memungkinkan satu set kelas untuk diproses terlebih dahulu menjadi file arsip bersama. Anda juga dapat menggunakan GraalVM untuk membangun gambar docker minimal untuk aplikasi Java. Untuk informasi selengkapnya, lihat posting blog Menggunakan GraalVM untuk Membangun Gambar Docker Minimal untuk Aplikasi Java. AWS

Tingkatkan ke versi JDK yang sadar kontainer

Sebelum JDK 8u131, JVM tidak mengenali memori atau batas CPU yang ditetapkan oleh mesin Docker menggunakan flag. Ini berarti bahwa setiap kali Anda menjalankan aplikasi Anda dalam wadah, JVM “melihat” jumlah total prosesor yang tersedia pada sistem, atau dalam kasus mesin virtual, sistem virtual. Hal yang sama berlaku untuk batas memori default: JVM akan melihat keseluruhan memori host dan menggunakannya untuk mengatur defaultnya. Akibatnya, JVM dapat mengklaim lebih banyak memori daripada platform kontainer memungkinkan, yang mengakibatkan mengakhiri proses Java oleh platform kontainer (Docker). Salah satu solusi untuk masalah ini adalah memigrasikan aplikasi Java Anda ke Java 9 atau 8u131+sebelum containerizing. Java 10 dan versi yang lebih baru memiliki kesadaran dan dukungan kontainer penuh.