Una API simple en Go contenerizada con Docker y gestionada con Docker Compose. Este proyecto está orientado a demostrar cómo contenerizar una aplicación básica en Go y gestionarla a través de Docker y Docker Compose, permitiendo una implementación flexible y escalable.
API en Go con dos endpoints:
- /ping: Responde con "pong"
- /status: Muestra el número de visitas y configuración del puerto
Características principales:
- Empaquetado en contenedor Docker
- Configuración mediante variables de entorno
- Contador de visitas en memoria
- Gestión con Docker Compose
- Go: Lenguaje principal de desarrollo
- Docker: Contenerización de la aplicación
- Docker Compose: Orquestación de contenedores
- Variables de entorno: Configuración del puerto
go-docker-api/
├── Dockerfile
├── docker-compose.yml
├── main.go
└── go.mod
- Define los endpoints:
// Endpoint /ping
http.HandleFunc("/ping", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "pong")
})
// Endpoint /status
http.HandleFunc("/status", func(w http.ResponseWriter, r *http.Request) {
visitCount++
fmt.Fprintf(w, "Visitas: %d\nPuerto: %s", visitCount, port)
})FROM golang:1.21-alpine
WORKDIR /app
COPY go.mod ./
RUN go mod download
COPY *.go ./
RUN CGO_ENABLED=0 GOOS=linux go build -o /go-docker-api
EXPOSE 8080
CMD ["/go-docker-api"]
version: '3.8'
services:
api:
build: .
ports:
- "8080:8080"
environment:
- PORT=8080
docker-compose build docker-compose up # Endpoint /ping
curl http://localhost:8080/ping
# Endpoint /status
curl http://localhost:8080/statusdocker-compose down- Go: Lenguaje principal de desarrollo
- Docker: Contenerización de la aplicación
- Docker Compose: Orquestación de contenedores
- Variables de entorno: Configuración del puerto
- Agregar persistencia de datos (SQLite/MySQL)
- Implementar sistema de logs
- Añadir validación de datos
- Mejorar el manejo de errores
- Crear rutas más complejas
- Agregar autenticación
- Implementar pruebas unitarias
- Dockerfile → Archivo con instrucciones para construir una imagen (FROM, COPY, RUN, CMD)
- Imagen → Molde base para crear contenedores (
docker build) - Contenedor → Instancia en ejecución de una imagen (
docker run) docker build -t <nombre>→ Construye imagen desde Dockerfiledocker run -p <local>:<contenedor>→ Ejecuta contenedor con mapeo de puertosdocker ps→ Lista contenedores activosdocker stop <id>→ Detiene contenedor en ejecucióndocker rm <id>→ Elimina contenedor detenidodocker rmi <imagen>→ Elimina imagen local
net/http→ Paquete para crear servidores/cliente HTTPhttp.HandleFunc→ Registra handler para endpoint HTTPhttp.ListenAndServe→ Inicia servidor web en puerto específicofmt.Println→ Imprime texto en consolamain()→ Función principal de ejecución del programa