Mengoptimalkan Build Docker untuk Aplikasi Go
Building a Go app on a laptop is quick, tapi building the same app inside Docker takes ages. Kenapa?
Technical Detail
Golang produces a binary file. Do you remember C? C juga produces a binary file. Mari kita lihat bagaimana kita bisa compile program di C.
- Let's consider the simplified Makefile below:
CFLAGS := -Wall -Werror
default: app
.PHONY: app
app: foo.o bar.o main.o
${CC} -o app $^
%.o: %.c
@echo building $@
${CC} ${CFLAGS} -c $<
- Running make app akan build an app artefact. Mari kita break it down untuk memahami kapan build itu slow dan kapan build itu fast.
Key Features
- Cache: Docker offers cache management, yang membuatnya possible untuk reuse cached files antara runs bahkan jika layers berubah.
- Dependency Caching: Kami bisa menggunakan approach yang sama untuk solve dependency caching issue.
Geek Opinion
Dengan menggunakan cache dan dependency caching, kita bisa mengurangi waktu build dan meningkatkan efisiensi. Tapi, perlu diingat bahwa approach ini memiliki limitation, seperti tidak bisa digunakan di ephemeral workers.
Namun, dengan menggunakan remote cache backends, kita bisa solve masalah ini. Contohnya, kita bisa menggunakan GitHub Actions backend atau registry backend untuk menyimpan cache.
Jadi, jika kamu ingin mengoptimalkan build Docker untuk aplikasi Go, cobalah menggunakan cache dan dependency caching. Dan, jangan lupa untuk mempertimbangkan limitation dan solusi yang tersedia.



