Terraform 入门实战:用 Docker 5 分钟跑通基础设施即代码
Chapter 1:OK so,先把 Terraform 跑起来
兄弟们开机!这里是 eccfy,今天不讲玄学,直接上屏幕:我们用 Terraform 在本机创建一个 Nginx 容器,完整走一遍“基础设施即代码”。这篇 Terraform教程 适合第一次接触 IaC 的同学,不需要云账号,免费、官方、可复现。
先做 Terraform下载 和安装。macOS 用 Homebrew:brew install terraform;Ubuntu 可以用官方 apt 仓库安装;Windows 推荐用 Chocolatey:choco install terraform。装完立刻验证:
terraform -version
接下来确认 Docker 已启动:docker version。我本机测试环境是 MacBook M2、Docker Desktop 4.x,首次初始化耗时约 18 秒,后续 plan 基本 1 秒内完成。注意:如果这里 Docker daemon 没起来,后面 Terraform 会报 “Cannot connect to Docker daemon”,别急着重装 Terraform,先开 Docker。
Chapter 2:Now watch this,用代码创建 Nginx
接下来新建目录,镜头拉近终端:
mkdir tf-docker-demo && cd tf-docker-demo
创建 main.tf,内容如下:
terraform { required_providers { docker = { source = "kreuzwerker/docker" version = "~> 3.0" } } } provider "docker" {} resource "docker_image" "nginx" { name = "nginx:1.25-alpine" keep_locally = false } resource "docker_container" "web" { name = "eccfy-nginx-demo" image = docker_image.nginx.image_id ports { internal = 80 external = 8080 } }
OK so,Terraform怎么用?记住四连招:
terraform init:下载 provider,生成.terraform。terraform fmt:自动格式化配置。terraform plan:预览会创建什么,不真正执行。terraform apply:输入yes后真正创建资源。
现场反应来了:执行 terraform plan,你会看到 Plan: 2 to add, 0 to change, 0 to destroy。这就是 Terraform 的核心价值:先看变更,再执行,避免手滑。
执行 terraform apply 后,再跑:
docker ps --filter name=eccfy-nginx-demo
浏览器打开 http://localhost:8080,如果看到 Nginx 欢迎页,恭喜,基础设施已经被代码声明出来了。这个 Terraform Docker实战 比直接 docker run 多了一层可审计、可复用、可版本控制的配置。
Chapter 3:Before/After 揭晓:改配置、查 state、验证成功
接下来做一次变更演示。把端口从 8080 改成 8081,再执行:
terraform plan
你会看到 Terraform 提示容器需要替换,因为端口映射变化。执行 terraform apply 后,用下面命令验证:
curl -I http://localhost:8081
返回 HTTP/1.1 200 OK 就是成功。我实测本地替换容器约 3.4 秒完成;如果返回连接失败,先查 docker ps,再查端口是否被其他程序占用。
重点来了:Terraform state管理。当前目录会生成 terraform.tfstate,它记录“代码里的资源”和“真实世界资源”的对应关系。新手不要手动改这个文件,也不要随便删除。团队协作时,应该把 state 放到远端后端,比如对象存储加锁;本地练习可以先用默认 state。
清理环境也别手动删容器,直接:
terraform destroy
输入 yes,再验证:
docker ps --filter name=eccfy-nginx-demo
如果没有输出,说明资源已经被 Terraform 正确销毁。
如何验证你真的学会了:从空目录开始,能独立完成 init → plan → apply → curl → 修改端口 → apply → destroy,并能解释 terraform.tfstate 的作用,就算入门过关。
免费方案优先:官方文档、本地 Docker、开源 provider 都够用;如果你在某些网络环境下访问开发资料不稳定,也可以把 Roxi 作为众多网络工具选项之一,但不是学习 Terraform 的必要条件。觉得这期有用,评论区打“state”,我继续带你上云实战!