Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Posso usar uma imagem base diferente para meu aplicativo Go no Docker?


Posso usar uma imagem base diferente para meu aplicativo Go no Docker?


Sim, você pode usar uma imagem base diferente para seu aplicativo Go no Docker. Aqui estão algumas opções e considerações:

1. Imagem oficial do Golang:
- A imagem oficial `golang` é um bom ponto de partida e é recomendada pela equipe Docker.
- Ele fornece o conjunto de ferramentas Go necessário e as dependências para construir e executar seu aplicativo Go.
- Exemplo: `FROM golang:1.19-alpine`

2. Imagem baseada em Alpine:
- A imagem `golang:alpine` é uma variante menor da imagem oficial `golang`, baseada na distribuição Alpine Linux.
- Isso resulta em imagens finais menores do Docker, o que é benéfico para a implantação.
- Porém, a imagem baseada em Alpine pode ter problemas de compatibilidade com algumas bibliotecas que dependem da glibc.
- Exemplo: `FROM golang:1.19-alpine`

3. Imagem sem distribuição:
- Imagens sem distribuição são imagens Docker mínimas e não baseadas em raiz que contêm apenas seu aplicativo e suas dependências de tempo de execução.
- Eles são projetados para serem tão pequenos e seguros quanto possível, sem incluir gerenciador de pacotes, shell ou outros componentes desnecessários.
- Exemplo: `FROM gcr.io/distroless/base-debian11`

4. Imagem de rascunho:
- A imagem `scratch` é uma imagem base vazia, o que significa que não contém sistema operacional, bibliotecas ou quaisquer outras dependências.
- Isso resulta na menor imagem Docker possível, mas exige que seu aplicativo seja compilado estaticamente e inclua todas as dependências necessárias.
- Exemplo: `DO zero`

Ao escolher uma imagem base, considere os seguintes fatores:
- Tamanho da imagem: imagens menores geralmente são preferidas para implantação mais rápida e requisitos de armazenamento reduzidos.
- Compatibilidade: certifique-se de que seu aplicativo e suas dependências sejam compatíveis com a imagem base escolhida.
- Segurança: Imagens sem distribuição e sem rascunho são mais seguras porque têm uma superfície de ataque menor.
- Depuração: Imagens com sistema operacional completo (por exemplo, `golang`) podem ser mais fáceis de depurar, pois você pode acessar o shell e os utilitários do contêiner.

A escolha da imagem base depende, em última análise, de seus requisitos específicos, como tamanho da imagem, segurança e complexidade do seu aplicativo Go. É comum usar a imagem oficial `golang` para desenvolvimento e teste e depois mudar para uma imagem mais minimalista como `distroless` ou `scratch` para implantações de produção.

Citações:
[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/linguagem/golang/build-images/
[5] https://dev.to/chseki/build-a-super-minimalistic-docker-image-to-run-your-golang-app-33j0