Despliega tu Primer Contenedor Docker con Terraform


En este blog, te guiaré paso a paso para desplegar un contenedor Docker utilizando Terraform con la imagen base nginx:alpine
. Además, aprenderás a gestionar un archivo index.html
que se mostrará en el contenedor Nginx con un mensaje personalizado: "Bienvenido al workshop de Terraform by Roxs". Este es un excelente punto de partida para quienes quieren comenzar a automatizar la gestión de contenedores y aprender a usar Terraform en sus proyectos de DevOps.
Requisitos previos
Para seguir este tutorial, asegúrate de tener lo siguiente instalado:
Terraform: Si aún no lo tienes instalado, puedes seguir las instrucciones de instalación aquí.
Docker: Para crear y gestionar contenedores, instala Docker desde aquí.
Conexión a Docker: Asegúrate de tener Docker en funcionamiento en tu máquina local para poder usarlo con Terraform.
Provider Docker: El proveedor Docker se utiliza para interactuar con contenedores e imágenes Docker. Aquí
Si ya tienes estos programas instalados, ¡estás listo para comenzar!
Paso 1: Preparación del entorno de Terraform
Lo primero es crear un archivo de configuración en Terraform. En este archivo, definiremos dos recursos principales:
El provider Docker para conectarnos a tu instalación local de Docker.
El provider local para gestionar archivos locales, como el archivo
index.html
que se usará en el contenedor.El recurso
data "local_file"
para referirnos al archivoindex.html
ya existente en el directorio.
Archivo index.html
Archivo main.tf
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "3.4.0"
}
}
}
provider "docker" {
}
provider "local" {}
data "local_file" "index_html" {
filename = "${path.module}/index.html"
}
resource "docker_container" "web" {
name = "nginx-terraform"
image = "nginx:latest"
ports {
internal = 80
external = 8080
}
upload {
file = "/usr/share/nginx/html/index.html"
content = data.local_file.index_html.content
}
}
output "container_name" {
value = docker_container.web.name
}
output "container_id" {
value = docker_container.web.id
description = "ID del contenedor Nginx"
}
output "container_image" {
value = docker_container.web.image
description = "Imagen del contenedor Nginx"
}
output "nginx_access_url" {
value = "http://localhost:8080"
description = "URL para acceder al servidor Nginx"
}
Explicación del código:
provider "docker"
: Configura la conexión con tu máquina local de Docker.provider "local"
: Configura el uso de archivos locales. Aquí, lo utilizamos para referirnos al archivoindex.html
que ya existe en tu sistema.data "local_file" "index_html"
: Este recurso se utiliza para referirse a un archivo local existente. El archivoindex.html
contendrá el mensaje que se mostrará cuando accedas a tu contenedor.docker_container "web"
: Crea el contenedor usando la imagennginx:alpine
y sube el archivoindex.html
al contenedor en la ruta/usr/share/nginx/html/
.
Paso 2: Inicialización y Validación de Terraform
Una vez que tengas el archivo main.tf
listo, puedes proceder con los siguientes pasos:
Inicializar el entorno de Terraform: Este comando descarga los proveedores necesarios y prepara el entorno de trabajo.
terraform init
Validar la configuración de Terraform: Este paso verifica que la configuración de Terraform sea correcta y no haya errores en el archivo de configuración.
terraform validate
Formatear el código de Terraform: Antes de aplicar la configuración, puedes formatear tu archivo
main.tf
para que siga las mejores prácticas de estilo de código.terraform fmt
Generar un plan de ejecución: Este comando te muestra el plan de lo que Terraform va a hacer. Verás los recursos que se van a crear, modificar o eliminar.
terraform plan
Esto es útil para confirmar que todo está bien antes de aplicar los cambios.
Aplicar la configuración: Si todo está correcto, ejecuta el siguiente comando para crear los recursos y desplegar el contenedor Docker.
terraform apply
Terraform te pedirá que confirmes antes de proceder. Si todo está bien, escribe
yes
para confirmar.
Paso 3: Ver el contenedor en ejecución
Una vez que Terraform haya terminado de crear el contenedor, podrás acceder a él desde tu navegador. Abre un navegador y navega a:
http://localhost:8080
Verás la página:
Comprobación del contenedor Docker:
Si quieres asegurarte de que el contenedor está funcionando correctamente, puedes ejecutar el siguiente comando para ver los contenedores activos:
docker ps
Esto mostrará el contenedor terraform-web
en ejecución en el puerto 8080.
Paso 4: Limpiar los recursos
Si ya no necesitas el contenedor y deseas liberar los recursos, puedes destruir todo lo creado con Terraform ejecutando:
terraform destroy
Esto eliminará tanto el contenedor como el archivo index.html
y cualquier otro recurso que Terraform haya creado.
Paso a paso
Próximos Pasos: Mejorando la Estructura de tu Proyecto de Terraform
Una vez que hayas trabajado con este ejemplo básico, puedes mejorar la estructura de tu proyecto de Terraform para hacerlo más modular, eficiente y fácil de mantener. Aquí te doy algunas recomendaciones para organizar y escalar tu infraestructura con Terraform:
1. Uso de archivos de configuración separados
Para mantener tu proyecto organizado, puedes separar diferentes aspectos de tu infraestructura en varios archivos de configuración. Por ejemplo, puedes tener:
variables.tf
: Para definir variables que se utilizarán en tu configuración.outputs.tf
: Para definir los outputs que necesitas mostrar después de aplicar la configuración.main.tf
: Donde se define la mayoría de los recursos de infraestructura.
Esto ayuda a mantener tu proyecto limpio y más fácil de modificar, especialmente cuando trabajas en proyectos más grandes.
2. Gestionar valores con variables
Es recomendable utilizar variables en lugar de codificar valores directamente en tu archivo main.tf
. De esta forma, puedes reutilizar los mismos valores en diferentes partes de tu configuración y cambiar los valores sin modificar directamente el código.
Ejemplo de un archivo variables.tf
:
variable "container_name" {
type = string
default = "terraform-web"
}
variable "nginx_image" {
type = string
default = "nginx:alpine"
}
Y luego referenciar estas variables en tu main.tf
:
resource "docker_container" "web" {
image = var.nginx_image
name = var.container_name
}
3. Uso de backends remotos para gestionar el estado
Si trabajas en equipo o tienes múltiples entornos, es importante usar un backend remoto para gestionar el estado de Terraform. Usar backends como S3 o Terraform Cloud te permite almacenar el estado de manera centralizada, evitando problemas de inconsistencia cuando varias personas o sistemas interactúan con la infraestructura.
4. Planificación y validación constante
Recuerda siempre ejecutar el comando terraform plan
antes de aplicar cambios en producción. Esto te permite visualizar los cambios que Terraform va a hacer y evita sorpresas.
Genera tu propio proyecto con IA
Si quieres crear tu propio entorno de Terraform y Docker, puedes usar este prompt para generar el código:
Prompt:
"Crear un contenedor Docker utilizando Terraform con la imagen nginx:alpine
, donde se suba un archivo index.html
con un mensaje personalizado. Utilizar los proveedores docker
version 3.4.0 y local
de Terraform para gestionar el contenedor y el archivo local. Asegúrate de que el contenedor exponga el puerto 8080 y muestre el contenido del archivo index.html
cuando se acceda desde un navegador. Además, configura outputs para mostrar el nombre, y los puertos del contenedor después de aplicarlo."
Conclusión
En este tutorial, aprendiste a desplegar un contenedor Docker utilizando Terraform con la imagen nginx:alpine
y a montar un archivo index.html
con un mensaje personalizado. Esta es una excelente forma de comenzar a trabajar con Terraform y Docker, dos herramientas poderosas que te permiten automatizar la infraestructura y mejorar tu flujo de trabajo en DevOps.
Recursos adicionales
Si deseas profundizar más en Terraform y Docker, te dejo algunos recursos útiles:
Recuerda, cada paso que des te acerca más a dominar la infraestructura como código. No importa si estás comenzando o si ya tienes experiencia, lo importante es seguir aprendiendo y explorando nuevas herramientas. ¡Lo mejor de todo es que nunca es tarde para empezar a transformar tu forma de trabajar con la tecnología! 🌟
Sígueme en Redes Sociales
Si te ha gustado este tutorial y quieres seguir aprendiendo sobre DevOps, Terraform, Docker y más, no dudes en seguirme en mis redes sociales:
Twitter: @roxsross
LinkedIn: Rossana Suarez
YouTube: 295devops
Instagram: @roxsross
¡No olvides compartir este post con tu comunidad! 💬 Si tienes dudas o sugerencias, ¡déjalas en los comentarios! Juntos seguimos aprendiendo y creciendo. 🚀
Subscribe to my newsletter
Read articles from Rossana Suarez directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Rossana Suarez
Rossana Suarez
Soy Roxs 👩💻| Software Developer | DevOps | DevSecOps | en @295DevOps 🖼 Content Creator. No se puede crecer si no estas dispuesto a saltar a la zona de peligro 🔥