building go binaries for small docker images
building docker images with go should be super easy - picking a minimal image (in my case I build from alpine), build the binary,
ADD to the image, run…
your app is not starting, instead you see something like this
standard_init_linux.go:195: exec user process caused "no such file or directory"
cause: several modules are calling C code via cgo, and cgo depends on libc. Go found libc on the system it was build on, so it linked to it. But libc is missing on alpine…
build a really static linked binary!
CGO_ENABLED=0 go build -a -o main .
- CGO_ENABLED=0 - disable cgo, this is the important part!
- -a - rebuild all, including imported depdenencies
now, your app should start without a problem, even on a scratch image :)