En la última década se a popularizado el uso de Docker como mecanismo de desarrollo gracias sus muchas ventajas tales como:
Por ello hoy realizaremos una aplicación de Go que será ejecutada desde un Docker container, está será la primera parte de un tutorial donde haremos deploy de una API hecha en Go hacia Google Cloud ☁️.
Para ello abriremos una terminal y navegaremos hacia la carpeta donde queramos crear nuestro proyecto en mi caso mi carpeta es Development.
Una vez dentro de la carpeta crearemos un nuevo proyecto:
~mkdir fiber-docker
Dentro de esta carpeta inicializaremos el Go modules para administrar nuestras dependencias del proyecto de Go.
~go mod init github.com/solrac97g/fiber-docker
Ahora crearemos un archivo de Go que será nuestro main:
~touch main.go
Y crearemos nuestro archivo de docker
~touch dockerfile
Esto será lo mínimo que requeriremos para ejecutar nuestro proyecto en Go por ahora.
Dentro del main ejecutaremos el siguiente código que nos montara un servidor HTTP usando Fiber un framework de Go y lo expondrá en el puerto 8080.
~package main import ( "github.com/gofiber/fiber/v2" "log" ) func main() { app := fiber.New() app.Get("/", func(c *fiber.Ctx) error { return c.SendString("Hello, World!") }) app.Get("/ping", func(c *fiber.Ctx) error { return c.SendString("pong") }) log.Fatal(app.Listen(":8080")) }
No olvides instalar nuestra dependencia, desde la terminal agregaremos la dependencia a nuestro proyecto:
~go get github.com/gofiber/fiber/v2
Ahora si ya tenemos nuestro código preparado para funcionar. Lo que hace este script básicamente es que crea dos endpoints el principal "/" que te responde con "hello world" y el "/ping" que te responde con "pong".
Para configurar nuestro Docker container editaremos nuestro archivo dockerfile
~FROM golang:1.18-alpine WORKDIR /app COPY go.mod . COPY go.sum . RUN go mod download COPY . . RUN go build -o ./out/dist . CMD ./out/dist
Esto lo que hace es crear un container que corre Go 1.18 luego copia los archivos de dependencias al contenedor y ejecuta una descarga de las dependencias para finalmente construir el proyecto y ejecutarlo.
Finalmente podemos ejecutar nuestro contenedor usando el siguiente comando primero para construir nuestro contenedor.
~docker build -t app .
Y ahora el siguiente comando para levantar nuestros contenedor.
~docker run -p 8888:8080 app
Nuestro proyecto estaré preparado para recibir peticiones desde la url : http://localhost:8888