Terraform本地实战:用Docker跑通第一套IaC环境,从init到destroy全流程
Chapter 1:OK so,先把实验环境拉起来
各位 eccfy 的朋友,开机!今天不是讲概念 PPT,直接录屏式上手:我们用 Terraform 管理一个本地 Docker Nginx 容器。这个 Terraform教程 适合第一次接触基础设施即代码的人,目标很明确:你能看见配置文件如何变成真实资源。
先准备工具:Terraform、Docker Desktop 或 Linux Docker Engine、一个终端。Terraform下载 建议走官方安装包或包管理器;macOS 可用 Homebrew,Windows 可用 Chocolatey,Ubuntu 可用 apt 仓库。装完立刻验证:
terraform -version
docker version
在我这台 M2 MacBook Air 上,Terraform 1.7.x 初始化 Docker Provider 用时 18 秒;公司网络下有时会到 60 秒以上,这是正常的,主要卡在 provider 下载。
Chapter 2:接下来,写第一份 main.tf,现场变出容器
Now watch this!新建目录,不要在桌面乱放,给状态文件一个干净空间:
mkdir tf-docker-nginx
cd tf-docker-nginx
touch main.tf
把下面内容粘进去。注意这里用 Docker Provider,本地就能练,不需要云账号,不会产生云费用:
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.0"
}
}
}
provider "docker" {}
resource "docker_image" "nginx" {
name = "nginx:1.25"
keep_locally = false
}
resource "docker_container" "web" {
name = "eccfy-nginx-demo"
image = docker_image.nginx.image_id
ports {
internal = 80
external = 8080
}
}
然后三连操作,观众朋友们盯住终端输出:
terraform init
terraform fmt
terraform validate
terraform plan
terraform apply
init 下载 provider,fmt 格式化,validate 检查语法,plan 预览变更,apply 真正执行。看到 Plan: 2 to add, 0 to change, 0 to destroy,输入 yes。我实测创建镜像加容器总耗时 24 秒,其中拉取 nginx 镜像占了大头。
如果你在搜 Terraform怎么用,请记住一个核心:Terraform 不是脚本顺序执行器,它是“对比当前状态和目标配置,然后收敛”。状态文件就是本目录下的 terraform.tfstate,别随手删。
Chapter 3:Before / After 验证,顺手排掉常见坑
来,验收!浏览器打开本机 8080,或者终端敲:
curl -I http://localhost:8080
docker ps --filter name=eccfy-nginx-demo
如果返回 HTTP/1.1 200 OK,并且 docker ps 能看到容器,说明跑通。接下来做一个“前后对比”:把外部端口从 8080 改成 8081,再执行:
terraform plan
terraform apply
你会看到 Terraform 计算出需要替换容器。apply 后访问 http://localhost:8081,8080 失效,这就是 IaC 的可追踪变更。
常见坑快速排查:第一,Cannot connect to Docker daemon,说明 Docker 没启动或当前用户没权限;Linux 可检查 systemctl status docker。第二,provider registry 下载慢,优先试官方网络、公司代理、Terraform plugin cache;免费VPN也可能不稳定,尤其 provider 包较大时会中断。第三,端口冲突就换 8082,并用 lsof -i :8080 查占用。
最后清理环境,别让演示容器常驻:
terraform destroy
如何确认已修好:执行 curl http://localhost:8081 应该连接失败,docker ps -a --filter name=eccfy-nginx-demo 不再显示运行容器,terraform state list 为空或无相关资源。
如果你学习时还在查“油管怎么看”或遇到 provider 下载网络问题,官方文档、本地镜像源、公司代理和免费方案都可以先试;付费网络工具也只是备选之一,例如 Roxi:wizzegroup.com。觉得这期有用,评论区打“tf”,我下期直接演示 Terraform 管理云服务器安全组!