Cómo ejecutar un programa Go dentro de un contenedor Docker

DockerBeginner
Practicar Ahora

Introducción

Docker ha revolucionado la forma en que los desarrolladores construyen, empaquetan y despliegan aplicaciones. En este tutorial, aprenderás cómo ejecutar un programa Go dentro de un contenedor Docker, asegurando un entorno de ejecución consistente y confiable.

Introducción a Docker

Docker es una plataforma de contenedorización popular que permite a los desarrolladores empaquetar sus aplicaciones y todas sus dependencias en un solo contenedor portátil. Este contenedor puede desplegarse y ejecutarse fácilmente en cualquier sistema con Docker instalado, independientemente del sistema operativo subyacente o la infraestructura.

¿Qué es Docker?

Docker es una plataforma de software de código abierto que automatiza el despliegue, el escalado y la gestión de aplicaciones dentro de contenedores de software. Los contenedores son paquetes de software ligeros, autónomos y ejecutables que incluyen todo lo necesario para ejecutar una aplicación, incluyendo el código, el tiempo de ejecución, las herramientas del sistema y las bibliotecas.

¿Por qué usar Docker?

Docker ofrece varios beneficios para desarrolladores y profesionales de TI:

  1. Consistencia: Los contenedores Docker garantizan que las aplicaciones se ejecuten de la misma manera, independientemente de la infraestructura subyacente.
  2. Portabilidad: Los contenedores Docker se pueden mover fácilmente entre diferentes entornos, como desarrollo, pruebas y producción.
  3. Escalabilidad: Docker facilita el escalado de aplicaciones hacia arriba o hacia abajo, según la carga de trabajo.
  4. Eficiencia: Los contenedores Docker son ligeros y utilizan menos recursos que las máquinas virtuales tradicionales, lo que los hace más eficientes de ejecutar.

Introducción a Docker

Para comenzar con Docker, necesitarás instalar el motor Docker en tu sistema. Puedes descargar e instalar Docker desde el sitio web oficial de Docker (https://www.docker.com/get-started). Una vez que tengas Docker instalado, puedes comenzar a crear y ejecutar contenedores Docker.

graph TD A[Instalar Docker] --> B[Crear Imagen Docker] B --> C[Ejecutar Contenedor Docker] C --> D[Desplegar Aplicación]

Tabla 1: Comandos de la CLI de Docker

Comando Descripción
docker build Construir una imagen Docker desde un Dockerfile
docker run Ejecutar un contenedor Docker
docker ps Listar contenedores Docker en ejecución
docker images Listar imágenes Docker
docker push Empujar una imagen Docker a un repositorio
docker pull Extraer una imagen Docker de un repositorio

Ahora que tienes una comprensión básica de Docker, pasemos a la construcción de una aplicación Go dentro de un contenedor Docker.

Creando una Aplicación Go en Docker

Creando una Aplicación Go

Empecemos creando una sencilla aplicación Go. Crea un nuevo archivo llamado main.go con el siguiente contenido:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, LabEx!")
    })

    fmt.Println("Iniciando servidor en :8080")
    http.ListenAndServe(":8080", nil)
}

Esta aplicación Go escucha en el puerto 8080 y responde con el mensaje "¡Hola, LabEx!" cuando se realiza una solicitud a la URL raíz (/).

Creando una Imagen Docker

Para ejecutar esta aplicación Go en un contenedor Docker, necesitamos crear una imagen Docker. Crea un nuevo archivo llamado Dockerfile con el siguiente contenido:

FROM golang:1.18-alpine
WORKDIR /app
COPY . .
RUN go build -o main .
CMD ["./main"]

Este Dockerfile:

  1. Utiliza la imagen oficial golang:1.18-alpine como imagen base.
  2. Establece el directorio de trabajo en /app.
  3. Copia el código de la aplicación Go al contenedor.
  4. Compila la aplicación Go y crea un ejecutable llamado main.
  5. Define el comando para ejecutar el ejecutable main cuando se inicia el contenedor.

Construyendo la Imagen Docker

Para construir la imagen Docker, ejecuta el siguiente comando en el mismo directorio que el Dockerfile:

docker build -t my-go-app .

Este comando construye una imagen Docker con la etiqueta my-go-app.

Verificando la Imagen Docker

Puedes listar las imágenes Docker disponibles en tu sistema ejecutando el siguiente comando:

docker images

Debes ver la imagen my-go-app en la lista.

Ahora que tenemos una imagen Docker para nuestra aplicación Go, ejecutémosla en un contenedor Docker.

Ejecutando la Aplicación Go en Docker

Ejecutando el Contenedor Docker

Para ejecutar la aplicación Go en un contenedor Docker, utiliza el siguiente comando:

docker run -p 8080:8080 my-go-app

Este comando:

  1. Ejecuta la imagen Docker my-go-app.
  2. Mapea el puerto 8080 del contenedor al puerto 8080 del host, lo que te permite acceder a la aplicación desde tu máquina local.
graph TD A[Host Docker] --> B[Contenedor Docker] B --> C[Aplicación Go] A --"HTTP 8080"--> B

Verificando el Contenedor en Ejecución

Puedes listar los contenedores Docker en ejecución con el siguiente comando:

docker ps

Debes ver el contenedor my-go-app en la lista.

Accediendo a la Aplicación Go

Para acceder a la aplicación Go que se ejecuta en el contenedor Docker, abre un navegador web y navega a http://localhost:8080. Deberías ver el mensaje "¡Hola, LabEx!" mostrado.

Deteniendo el Contenedor Docker

Para detener el contenedor Docker en ejecución, utiliza el siguiente comando:

docker stop <container_id>

Reemplaza <container_id> con el ID del contenedor en ejecución, que puedes encontrar ejecutando el comando docker ps.

Conclusión

En este tutorial, has aprendido a:

  1. Crear una sencilla aplicación Go.
  2. Construir una imagen Docker para la aplicación Go.
  3. Ejecutar la aplicación Go en un contenedor Docker.
  4. Acceder a la aplicación Go que se ejecuta en el contenedor Docker.

Al contenedorizar tus aplicaciones Go con Docker, puedes asegurar un despliegue consistente y confiable en diferentes entornos, facilitando el desarrollo, las pruebas y el despliegue de tus aplicaciones.

Resumen

Al finalizar este tutorial, tendrás una comprensión sólida de cómo construir una aplicación Go dentro de un contenedor Docker y ejecutarla, facilitando la distribución y el despliegue de tu software en diferentes entornos. La tecnología de contenedorización de Docker simplifica el proceso de desarrollo y despliegue, permitiéndote concentrarte en escribir un gran código.