Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Bisakah saya menggunakan gambar dasar yang berbeda untuk aplikasi Go saya di Docker


Bisakah saya menggunakan gambar dasar yang berbeda untuk aplikasi Go saya di Docker


Ya, Anda dapat menggunakan image dasar yang berbeda untuk aplikasi Go Anda di Docker. Berikut beberapa pilihan dan pertimbangannya:

1. Gambar Resmi Golang:
- Gambar `golang` resmi adalah titik awal yang baik dan direkomendasikan oleh tim Docker.
- Ini menyediakan toolchain dan dependensi Go yang diperlukan untuk membangun dan menjalankan aplikasi Go Anda.
- Contoh: `DARI golang:1.19-alpine`

2. Gambar Berbasis Alpen:
- Gambar `golang:alpine` adalah varian yang lebih kecil dari gambar `golang` resmi, berdasarkan distribusi Alpine Linux.
- Ini menghasilkan gambar Docker akhir yang lebih kecil, yang bermanfaat untuk penerapan.
- Namun, image berbasis Alpine mungkin memiliki masalah kompatibilitas dengan beberapa perpustakaan yang bergantung pada glibc.
- Contoh: `DARI golang:1.19-alpine`

3. Gambar Tanpa Distro:
- Gambar Distroless adalah gambar Docker minimal berbasis non-root yang hanya berisi aplikasi Anda dan dependensi runtime-nya.
- Mereka dirancang sekecil dan seaman mungkin, tanpa menyertakan manajer paket, shell, atau komponen lain yang tidak diperlukan.
- Contoh: `DARI gcr.io/distroless/base-debian11`

4. Gambar Gores:
- Gambar `scratch` adalah gambar dasar kosong, artinya tidak mengandung sistem operasi, pustaka, atau dependensi lainnya.
- Ini menghasilkan gambar Docker sekecil mungkin, tetapi aplikasi Anda harus dikompilasi secara statis dan menyertakan semua dependensi yang diperlukan.
- Contoh: `DARI awal`

Saat memilih gambar dasar, pertimbangkan faktor-faktor berikut:
- Ukuran Gambar: Gambar yang lebih kecil umumnya lebih disukai untuk penerapan yang lebih cepat dan mengurangi kebutuhan penyimpanan.
- Kompatibilitas: Pastikan aplikasi Anda dan dependensinya kompatibel dengan gambar dasar yang Anda pilih.
- Keamanan: Gambar tanpa distro dan awal lebih aman karena permukaan serangannya lebih kecil.
- Debugging: Gambar dengan sistem operasi lengkap (mis., `golang`) mungkin lebih mudah untuk di-debug, karena Anda dapat mengakses shell dan utilitas container.

Pilihan gambar dasar pada akhirnya bergantung pada kebutuhan spesifik Anda, seperti ukuran gambar, keamanan, dan kompleksitas aplikasi Go Anda. Biasanya menggunakan image `golang` resmi untuk pengembangan dan pengujian, lalu beralih ke image yang lebih minimal seperti `distroless` atau `scratch` untuk penerapan produksi.

Kutipan:
[1] https://stackoverflow.com/questions/47028597/choosing-golang-docker-base-image
[2] https://hub.docker.com/_/golang
[3] https://snyk.io/blog/containerizing-go-applications-with-docker/
[4] https://docs.docker.com/bahasa/golang/build-images/
[5] https://dev.to/chseki/build-a-super-minimalistic-docker-image-to-run-your-golang-app-33j0