Sign inSign up

pedrovieira249/fullcycle

By pedrovieira249

•Updated 11 months ago

Imagem Docker minimalista em Go (<2MB) que imprime "Full Cycle Rocks!!"

Image
0

317

pedrovieira249/fullcycle repository overview

⁠Full Cycle Rocks! 🚀

Docker Go Size Pulls

Imagem Docker minimalista em Go que imprime "Full Cycle Rocks!!" - Desafio Full Cycle.

⁠🎯 Sobre

Esta é uma imagem Docker extremamente leve (< 2MB) criada como parte do desafio Full Cycle. Ela demonstra o uso de multi-stage builds e a imagem scratch para criar containers otimizados.

⁠🚀 Como Usar

⁠Executar a imagem:
docker run pedrovieira249/fullcycle

Saída esperada:

Full Cycle Rocks!!
⁠Executar com auto-remoção:
docker run --rm pedrovieira249/fullcycle
⁠Especificar tag específica:
docker run pedrovieira249/fullcycle:latest

⁠📦 Tags Disponíveis

  • latest - Versão mais recente

⁠📊 Características

  • ✅ Tamanho: < 2MB
  • ✅ Base: scratch (imagem vazia)
  • ✅ Linguagem: Go (Golang)
  • ✅ Build: Multi-stage
  • ✅ Binário: Compilado estaticamente
  • ✅ Otimização: Flags -ldflags="-s -w"

⁠🏗️ Como Foi Construída

⁠Multi-stage Build:
# Etapa 1: Build
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY main.go .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o fullcycle main.go

# Etapa 2: Imagem final
FROM scratch
COPY --from=builder /app/fullcycle /fullcycle
ENTRYPOINT ["/fullcycle"]
⁠Código Go:
package main

import "fmt"

func main() {
    fmt.Println("Full Cycle Rocks!!")
}

⁠🔧 Build Local

Se quiser construir a imagem localmente:

# Clone o repositório
git clone https://github.com/pedrovieira249/desafio-go.git
cd desafio-go

# Build
docker build -t pedrovieira249/fullcycle .

# Run
docker run pedrovieira249/fullcycle

⁠📈 Comparação de Tamanhos

AbordagemTamanho
golang:1.21~800MB
golang:1.21-alpine~300MB
Multi-stage + alpine~15MB
Multi-stage + scratch~1.8MB ✨

⁠🎓 Conceitos Aplicados

⁠1. Multi-stage Build

Separa o ambiente de compilação do ambiente de execução, reduzindo drasticamente o tamanho final.

⁠2. FROM scratch

Usa uma imagem Docker vazia como base - perfeita para binários estáticos.

⁠3. Compilação Estática
CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w"
  • CGO_ENABLED=0: Remove dependências C
  • -ldflags="-s -w": Remove símbolos de debug

⁠📝 Uso em Docker Compose

services:
  fullcycle:
    image: pedrovieira249/fullcycle:latest
    container_name: fullcycle-app

⁠🎯 Casos de Uso

  • ✅ Demonstração de otimização de imagens Docker
  • ✅ Exemplo de multi-stage builds
  • ✅ Referência para builds em Go
  • ✅ Container minimalista de teste

⁠🐛 Troubleshooting

⁠Imagem não executa em arquitetura diferente

A imagem foi compilada para linux/amd64. Se precisar de outras arquiteturas:

docker buildx build --platform linux/amd64,linux/arm64 -t pedrovieira249/fullcycle .
⁠Erro: "exec format error"

Certifique-se de que está usando a arquitetura correta (amd64).

⁠📄 Licença

Este projeto é de código aberto e está disponível para fins educacionais.

⁠👤 Autor

Pedro Vieira

⁠🎉 Agradecimentos

Projeto desenvolvido como parte do curso Full Cycle - @FullCycleSchool⁠


Full Cycle Rocks!! 🚀

Imagem Docker otimizada • < 2MB • Multi-stage build • Scratch base

Tag summary

Content type

Image

Digest

sha256:b157b8330…

Size

535 kB

Last updated

11 months ago

docker pull pedrovieira249/fullcycle