Como você deve ter visto no vídeo que postamos no canal, uma das formas de reduzir o tamanho de uma imagem docker para aplicações Go é utilizando a imagem scratch como base.
Mas e o binário? Como podemos reduzi-lo sem remover código?
É isso que vamos ver nesse post.
Para que tenhamos uma base de programa para testar os comandos que vamos ver nesse post, vamos escrever uma API bem simples.
package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/", func(rw http.ResponseWriter, r *http.Request) { fmt.Fprintf(rw, "Olá Mundo\\n") }) log.Fatal(http.ListenAndServe(":8080", nil)) }
Para ter um comparativo, vamos fazer um build do programa acima usando a flag -o
, que é uma das flags que o comando build aceita. Essa flag é utilizada para modificar o nome do arquivo que o build irá gerar.
$ go build -o api-dev
Se você verificar o diretório, deverá ver um binário de aproximadamente 5.9 MB com o nome api-dev.
Além do -o
, o comando build aceita várias outras flags. Para reduzir o tamanho do nosso binário, vamos utilizar a flag -ldflags
.
Essa flag é utilizada para enviar outras flags para o linker. Linker é o programa responsável por “linkar” os pedaços do código fonte que foram compilados, na versão final do binário que será gerado.
Dentre as várias flags que podemos passar para o linker, existem duas que nos ajudam no trabalho de redução do tamanho final do binário removendo informações que não precisamos durante a execução do programa.
A primeira é a -s
que irá omitir a tabela de símbolos e informações para debug. A segunda é a -w
que irá omitir a tabela DWARF.
Para utilizá-las, devemos executar o comando de build da seguinte forma.
$ go build -ldflags "-s -w" -o api-prod
Agora, olhando para nosso diretório, veremos um novo binário com o nome api-prod e 4.4 MB de tamanho.
Embora não pareça muito, ao utilizar essas flags nesse simples programa, conseguimos reduzir cerca de 26% de seu tamanho.
Caso você queira conhecer outras todas as opções disponíveis de flags que o -ldflags
, é só acessar a documentação clicando aqui.
Para ajudar a comunidade, compartilhe aqui nos comentários o quando reduziu na sua aplicação.
Espero que tenha ajudado e até a próxima!