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, lihatGambar Kontainer “Distroless” GitHubrepositori.

Ini adalah praktik terbaik untuk mengikuti prinsip sekali pakai dan mengembangkan waktu startup yang cepat untuk gambar kontainer Anda. Dengan menggunakan teknik-teknik sepertiahead-of-time-compilation(Dokumentasi OpenJDK) atauberbagi 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 mengizinkan satu set kelas untuk diproses sebelumnya menjadi file arsip bersama. Anda juga dapat menggunakan GraalVM untuk membangun gambar buruh pelabuhan minimal untuk aplikasi Java. Untuk informasi lebih lanjut, lihatMenggunakan GraalVM untuk Membangun Gambar Docker Minimal untuk Aplikasi Java AWSposting blog.

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.