Introducción
En el laboratorio anterior, preparamos nuestra cocina (instalamos Terraform). Ahora es el momento de escribir el menú.
En Terraform, normalmente no tiene que describir manualmente cada paso de bajo nivel. En su lugar, describe los objetos de infraestructura que desea. Cada objeto administrado se representa como un recurso.
Los recursos son las unidades principales que administra Terraform. Funcionan como puente entre el código de sus archivos .tf y los objetos reales de la plataforma de destino.
Piense en ello como pedir en un restaurante. No le dice al chef: «pique una cebolla, sofríala, bata dos huevos...». Simplemente dice: «Quiero una tortilla». Terraform es el camarero que recibe su pedido (la configuración) y se asegura de que la cocina (Docker) prepare exactamente lo que ha solicitado.
Este es el flujo de trabajo básico de Terraform: definir recursos, previsualizar los cambios propuestos y aplicarlos.
Defina la imagen
Comenzaremos indicando qué ingredientes necesitamos. En el mundo de Docker, antes de ejecutar un contenedor necesita una imagen (algo parecido a un paquete inmutable del software).
Primero, vaya a la carpeta del proyecto y cree nuestra hoja de pedido, el archivo main.tf.
cd ~/project
touch main.tf
Abra main.tf con el editor de texto nano.
nano main.tf
Siempre comenzamos indicando a Terraform quién realizará el trabajo (el proveedor). Copie y pegue este bloque estándar al principio del archivo para configurar el proveedor de Docker:
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.0.1"
}
}
}
provider "docker" {}
Ahora añadiremos nuestro primer pedido: la imagen de Nginx. Agregue este código al archivo main.tf, debajo del bloque del proveedor (use las teclas de flecha para desplazarse hacia abajo):
resource "docker_image" "nginx" {
name = "nginx:latest"
keep_locally = false
}
Después de pegar el código, guarde el archivo. Presione Ctrl + O, pulse Enter para confirmar y, a continuación, presione Ctrl + X para salir del editor.
Analicemos este lenguaje:
resource: esta palabra le indica a Terraform «quiero pedir algo»."docker_image": es el tipo del elemento que estamos solicitando. Si integrara AWS, podría seraws_instance."nginx": es el nombre que damos a este elemento en nuestro cuaderno para poder referirnos a él más adelante. No cambia nada en el mundo real.name = "nginx:latest": es el parámetro específico que se envía a Docker. Indica a Docker exactamente qué imagen debe descargar.
Ahora su plano contiene un proveedor y una instrucción para crear un recurso.
Defina el contenedor
Una imagen permanece en el disco, pero un contenedor es la aplicación en ejecución. Es como la diferencia entre una receta y la comida ya servida en el plato.
Ahora agregaremos un segundo recurso al archivo main.tf. Este nuevo recurso depende del primero.
Abra de nuevo main.tf con nano:
nano main.tf
Use las teclas de flecha para desplazarse hasta el final del archivo y pegue este bloque al final:
resource "docker_container" "web" {
image = docker_image.nginx.image_id
name = "tutorial"
ports {
internal = 80
external = 8000
}
}
Observe la parte especial de la línea image = docker_image.nginx.image_id.
Esta referencia es más que una simple comodidad. Permite que Terraform cree un grafo de dependencias para determinar automáticamente el orden de creación.
En lugar de volver a escribir "nginx:latest", hacemos referencia al recurso que definimos antes (docker_image.nginx). Esto le indica a Terraform: «No intentes crear este contenedor hasta que hayas terminado de preparar la imagen». Así es como creamos dependencias.
También agregamos un bloque ports. Este bloque abre una ventana desde su equipo (el puerto 8000) hacia el contenedor (el puerto 80), lo que le permite ver el sitio web.
Inicialice y cree el plan
Antes de permitir que Terraform realice cambios, debemos inicializar el proyecto (descargar las herramientas) y después previsualizar el plan.
Primero, ejecute init para instalar los complementos del proveedor de Docker:
terraform init
Ahora imagine que el camarero llevara la comida inmediatamente, sin confirmar el pedido. ¡Sería arriesgado! Terraform tiene una función de seguridad llamada Plan. Esta función revisa lo que ha solicitado, comprueba lo que ya existe y calcula la diferencia.
Ejecute el comando de plan:
terraform plan
Observe atentamente la salida. Verá signos + verdes junto a los recursos. Estos símbolos significan «se creará».
La fase de plan es una de las funciones de seguridad más valiosas de Terraform. Permite revisar los cambios propuestos antes de modificar nada real.
Consejo importante: lea siempre el plan. Es su última oportunidad para detectar errores antes de que se conviertan en infraestructura real.
Aplique los cambios
El plan parece correcto. Ahora es el momento de decirle al camarero: «¡Hágalo!».
El comando apply ejecuta el plan.
terraform apply
Terraform es muy cuidadoso. Mostrará el plan una vez más y le pedirá una confirmación final. Debe escribir yes para continuar.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
Después de escribir yes y pulsar Enter, Terraform se pondrá en contacto con Docker, descargará la imagen e iniciará el contenedor.
¡Comprobemos si todo ha funcionado! Puede usar comandos estándar de Docker para verificar si el contenedor está en ejecución:
docker ps
También puede probar el sitio web que acabamos de implementar. Como asignamos el puerto 8000, podemos acceder a él mediante curl:
curl localhost:8000
Si ve el código HTML de «Welcome to nginx!», ¡ha implementado correctamente su primera infraestructura mediante código!
Resumen
¡Enhorabuena! Ha completado el flujo de trabajo básico de Terraform.
En este laboratorio, aprendió lo siguiente:
- Definición de recursos: cómo especificar lo que desea (imágenes y contenedores) en
main.tf. - Referencias: cómo vincular recursos entre sí, por ejemplo, indicando al contenedor qué imagen debe usar.
- Plan: cómo previsualizar la «factura» antes de confirmar los cambios.
- Apply: cómo crear la infraestructura real.
Este ciclo de Escribir -> Planificar -> Aplicar es exactamente la forma en que los profesionales administran infraestructuras cloud de gran escala. Acaba de dar su primer paso para convertirse en ingeniero de DevOps.



