Poin Penting
- Gunakan image Docker resmi untuk keamanan dan kinerja yang lebih baik. Membuat gambar Anda sendiri dapat mengakibatkan konfigurasi yang salah dan memerlukan waktu lebih lama.
- Gunakan versi image Docker tertentu untuk menghindari perilaku tak terduga dan bentrok dengan dependensi. Tarik dan bangun menggunakan gambar versi tertentu.
- Pindai image Docker untuk mengetahui kerentanan keamanan menggunakan perintah docker scan. Tentukan apakah suatu gambar cukup aman untuk aplikasi Anda.
Docker adalah perangkat lunak containerisasi paling populer, namun tidak semua orang menggunakannya secara efisien. Jika Anda tidak mengikuti praktik terbaik Docker, Anda dapat membuat aplikasi Anda rentan terhadap masalah keamanan atau masalah kinerja.
Berikut adalah beberapa praktik terbaik yang dapat Anda terapkan, untuk menggunakan fitur Docker dengan bijak. Langkah-langkah ini meningkatkan keamanan dan memastikan Anda membuat file Docker yang dapat dipelihara.
1. Gunakan Gambar Docker Resmi
Saat memasukkan aplikasi Anda ke dalam container, Anda harus menggunakan image Docker. Anda dapat membuat image dengan konfigurasi khusus atau menggunakan image resmi Docker.
Membangun gambar Anda sendiri mengharuskan Anda menangani sendiri semua konfigurasinya. Misalnya, untuk membuat image untuk aplikasi node.js, Anda harus mengunduh node.js dan dependensinya. Prosesnya memakan waktu dan mungkin tidak menghasilkan semua konfigurasi yang benar.
Docker menyarankan Anda menggunakan image node.js resmi yang dilengkapi dengan semua dependensi yang benar. Gambar Docker memiliki langkah keamanan yang lebih baik, ringan, dan diuji untuk berbagai lingkungan. Anda dapat menemukan gambar resminya di Gambar resmi Docker halaman.
2. Gunakan Versi Tertentu dari Gambar Docker
Biasanya, saat Anda mengambil gambar resmi, gambar tersebut memiliki tag terbaru yang mewakili versi terbaru dari gambar tersebut. Setiap kali Anda membuat container dari gambar tersebut, versinya berbeda dari container terakhir.
Membangun dengan versi image Docker yang berbeda dapat menyebabkan perilaku yang tidak terduga dalam aplikasi Anda. Versi tersebut mungkin berbenturan dengan dependensi lain dan pada akhirnya menyebabkan aplikasi Anda gagal.
Docker menyarankan Anda menarik dan membangun menggunakan gambar versi tertentu. Gambar resmi juga memiliki dokumentasi dan mencakup kasus penggunaan paling umum.
Misalnya, sebagai ganti buruh pelabuhan tarik alpine, menggunakan buruh pelabuhan tarik alpine: 3.18.3. Docker akan menarik versi spesifik tersebut. Anda kemudian dapat menggunakannya dalam build yang berurutan, sehingga mengurangi kesalahan dalam aplikasi Anda. Anda dapat menemukan versi gambar tertentu di halaman gambar Docker resmi, di bawah Tag yang didukung dan tautan Dockerfile masing-masing:
3. Pindai Gambar untuk Menemukan Kerentanan Keamanan
Bagaimana Anda dapat menentukan bahwa gambar yang ingin Anda buat tidak memiliki kerentanan keamanan? Dengan memindainya. Anda dapat memindai image Docker menggunakan perintah docker scan. Sintaksnya adalah sebagai berikut:
docker scan [IMAGE]
Anda harus masuk terlebih dahulu ke buruh pelabuhan untuk memindai gambar.
docker login
Kemudian, pindai gambar tertentu yang ingin Anda periksa:
docker scan ubuntu: latest
Sebuah alat bernama Sinkronisasi memindai gambar, membuat daftar kerentanan apa pun menurut tingkat keparahannya. Anda dapat melihat jenis kerentanan dan tautan ke informasi mengenainya, termasuk cara memperbaikinya. Anda dapat mengetahui dari pemindaian apakah gambar tersebut cukup aman untuk aplikasi Anda.
4. Gunakan Gambar Docker Berukuran Kecil
Saat Anda menarik image Docker, ia dilengkapi dengan semua utilitas sistem. Ini meningkatkan ukuran gambar dengan alat yang tidak Anda perlukan.
Gambar Docker yang besar menghabiskan ruang penyimpanan dan dapat memperlambat waktu proses container. Mereka juga memiliki kemungkinan lebih besar terhadap kerentanan keamanan.
Kamu bisa kurangi ukuran image Docker menggunakan image Alpine. Gambar Alpen ringan dan hanya dilengkapi dengan alat yang diperlukan. Mereka mengurangi ruang penyimpanan, membuat aplikasi Anda berjalan lebih cepat dan efisien.
Anda akan menemukan versi Alpine untuk sebagian besar image resmi di Docker. Berikut ini contoh versi Alpine untuk PostgreSQL:
5. Optimalkan Lapisan Gambar Caching
Setiap perintah di Dockerfile mewakili lapisan pada gambar. Lapisan-lapisan tersebut memiliki utilitas yang berbeda dan menjalankan fungsi yang berbeda-beda. Jika Anda melihat gambar resmi di Docker Hub, Anda akan melihat instruksi yang digunakan untuk membuatnya.
Dockerfile mencakup semua yang Anda perlukan untuk membuat image. Itu salah satu alasan mengapa banyak orang pengembang lebih memilih Docker daripada mesin virtual.
Berikut struktur contoh gambar Alpine:
Saat Anda membangun aplikasi berdasarkan gambar, Anda menambahkan lebih banyak lapisan pada gambar. Docker menjalankan instruksi pada Dockerfile dari atas ke bawah, dan jika suatu lapisan berubah, Docker harus membangun kembali lapisan berikutnya.
Praktik terbaiknya adalah mengatur Dockerfile Anda dari file yang paling sedikit berubah hingga yang paling sering berubah. Petunjuk yang tidak berubah, seperti instalasi, dapat ditemukan di bagian atas file.
Saat Anda mengubah file, Docker membangun dari file yang diubah dan menyimpan file yang tidak diubah di atasnya. Oleh karena itu, prosesnya berjalan lebih cepat.
Perhatikan contoh yang diilustrasikan pada gambar di atas. Jika ada perubahan pada file aplikasi, Docker membangun dari sana; tidak perlu menginstal paket npm lagi.
Jika Anda membangun dari gambar, prosesnya akan berjalan lebih cepat daripada membangun kembali semua lapisan lainnya. Caching juga mempercepat penarikan dan pengiriman gambar dari Docker Hub.
7. Gunakan File .dockerignore
Saat membuat image menggunakan Dockerfile, Anda mungkin ingin merahasiakan informasi tertentu. Beberapa file dan folder mungkin menjadi bagian dari proyek, tetapi Anda tidak ingin menyertakannya dalam proses pembangunan.
Menggunakan file .dockerignore akan mengurangi ukuran gambar secara signifikan. Hal ini dikarenakan proses pembangunan hanya mencakup file-file yang diperlukan saja. Ini juga membantu menjaga kerahasiaan file dan menghindari pengungkapan kunci rahasia atau kata sandi.
File .dockerignore adalah file yang Anda buat di folder yang sama dengan Dockerfile Anda. Ini seperti file teks file .gitignore, yang berisi nama file apa pun yang tidak ingin Anda sertakan dalam proses pembangunan.
Berikut ini contohnya:
8. Gunakan Prinsip Pengguna yang Paling Tidak Berhak Istimewa
Secara default, Docker menggunakan pengguna root sebagai admin untuk izin menjalankan perintah, tetapi ini adalah praktik yang buruk. Jika ada kerentanan di salah satu container, peretas dapat mengakses host Docker.
Untuk menghindari skenario ini, buat pengguna dan grup khusus. Anda dapat mengatur izin yang diperlukan grup untuk melindungi informasi sensitif. Jika pengguna disusupi, Anda dapat menghapusnya tanpa mengekspos keseluruhan proyek.
Berikut ini contoh yang menunjukkan cara membuat pengguna dan mengatur izinnya:
Beberapa gambar dasar memiliki pengguna semu yang dibuat di dalamnya. Anda dapat menggunakan pengguna yang diinstal alih-alih izin pengguna root.
Mengapa Anda Harus Mengadopsi Praktik Terbaik Docker
Praktik terbaik adalah cara terbaik untuk mengurangi kerentanan dan menulis kode yang lebih bersih. Ada banyak praktik terbaik yang dapat Anda terapkan pada setiap fitur Docker yang Anda gunakan.
Proyek yang terorganisir dengan baik membuat sinkronisasi lebih mudah dengan alat orkestrasi lain seperti Kubernetes. Anda dapat memulai dengan apa yang diuraikan dalam artikel dan mengadopsi lebih banyak lagi saat Anda mempelajari Docker.