惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
Attack and Defense Labs
Attack and Defense Labs
WordPress大学
WordPress大学
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Spread Privacy
Spread Privacy
AI
AI
宝玉的分享
宝玉的分享
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
C
Cyber Attacks, Cyber Crime and Cyber Security
爱范儿
爱范儿
Help Net Security
Help Net Security
V
Visual Studio Blog
大猫的无限游戏
大猫的无限游戏
Forbes - Security
Forbes - Security
P
Privacy & Cybersecurity Law Blog
Project Zero
Project Zero
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
T
Troy Hunt's Blog
美团技术团队
T
Threatpost
K
Kaspersky official blog
V
V2EX
Scott Helme
Scott Helme
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
T
Tailwind CSS Blog
V
Vulnerabilities – Threatpost
Last Week in AI
Last Week in AI
PCI Perspectives
PCI Perspectives
Google Online Security Blog
Google Online Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
Engineering at Meta
Engineering at Meta
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
I
InfoQ
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
酷 壳 – CoolShell
酷 壳 – CoolShell
GbyAI
GbyAI
L
LINUX DO - 最新话题
T
The Exploit Database - CXSecurity.com
L
LangChain Blog
S
Security @ Cisco Blogs
The Last Watchdog
The Last Watchdog
H
Hacker News: Front Page
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
TaoSecurity Blog
TaoSecurity Blog

教程 – liseezn'blog

在Zeabur部署Rhex现代论坛 – liseezn'blog Rhex论坛接入DeepSeek 踩坑实录 – liseezn'blog SVGcode 一键部署到 Zeabur – liseezn'blog Edge密码危机自救:1小时的迁移双持方案 – liseezn'blog SEE~Friends 3.4.0 版本更新|从稳定可用,到好用耐用 – liseezn'blog 解决Docker构建PHP8.2+XLoad镜像常见报错,附国内加速+GitHub推送指南 – liseezn'blog OpenClaw 完整部署+接入OpenRouter全教程(Zeabur平台) – liseezn'blog SeeFriends:一款让你轻松管理友情链接的 WordPress 插件 – liseezn'blog Zeabur 一键部署 OpenClaw 教程(折后最低1.6美元/月) – liseezn'blog Zeabur部署Matomo教程 – liseezn'blog 用certd,5分钟搞定HTTPS证书 – liseezn'blog 学生综合素质评价系统操作教程 – liseezn'blog 轻松迁移网站:使用UpdraftPlus完整教程 – liseezn'blog DeepSeek + Xmind:轻松把 PDF、Word 文档转思维导图!pdf/word文档转思维导图 – liseezn'blog Argon主题博客美化 – liseezn'blog Wordpass_Argon主题安装 – liseezn'blog n8n 入门:用可视化工作流打造你的专属自动化工具 – liseezn'blog Zed 编辑器高效配置指南:从安装到打造专属前端工作流 – liseezn'blog 强制使用 HTTPS:提升网站安全性 – liseezn'blog 在 lita.eu.org 免费主机上搭建 博客 – liseezn'blog
OpenTofu 实战:用开源 IaC 工具一键部署 Docker 应用 – liseezn'blog
liseeze · 2024-02-04 · via 教程 – liseezn'blog

本文最后更新于37 天前,其中的信息可能已经过时,如有错误请发送邮件到[email protected]

2024 年 1 月,Linux 基金会正式发布了 OpenTofu 的第一个稳定版本,这是一个从 Terraform 分支而来的开源基础设施即代码工具。面对云服务商的许可证变更,OpenTofu 承诺保持 MPL 2.0 协议开放。本文将通过一个完整的实战案例——用 OpenTofu 在本地 Docker 环境中启动一个 Nginx 容器——带你快速上手这个工具。

  1. 什么是 OpenTofu?

简单来说,它就是曾经免费的 Terraform 的社区维护版,与 Terraform 语法完全兼容,你甚至可以将原有的 .tf 文件直接拿来用。它的工作流依然是熟悉的 init → plan → apply。

  1. 环境准备

· 一台安装好 Docker 的机器(Windows/macOS/Linux 均可)
· 基本的终端操作能力

Docker 安装可参考官方文档,确认 docker ps 可正常运行。

  1. 安装 OpenTofu

在 macOS 上:

brew install opentofu

其他系统可以从 GitHub Releases 下载二进制文件,解压后放到 PATH 中。

验证安装:

tofu --version

看到 OpenTofu v1.6.0 类似字样即为成功。

  1. 编写配置文件

创建一个新目录,比如 tofu-nginx,在里面新建文件 main.tf:

terraform {
  required_version = ">= 1.6.0"
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = "~> 3.0"
    }
  }
}

provider "docker" {
  # 默认连接本地 Docker 守护进程,无需额外配置
}

resource "docker_image" "nginx" {
  name         = "nginx:latest"
  keep_locally = false
}

resource "docker_container" "nginx" {
  image = docker_image.nginx.image_id
  name  = "opentofu-nginx-demo"
  ports {
    internal = 80
    external = 8080
  }
}

这段代码的含义:

· 声明需要 docker provider。
· 拉取 nginx:latest 镜像。
· 创建一个名为 opentofu-nginx-demo 的容器,将本机 8080 端口映射到容器 80 端口。

  1. 初始化与部署

在终端中进入该目录,执行:

tofu init

此命令会下载所需的 provider 插件,与 Terraform 相同。

然后执行:

tofu plan

你会看到一个清晰的执行计划,显示将要创建的资源。确认无误后,执行:

tofu apply

输入 yes 确认,等待几十秒,容器就创建完成了。

打开浏览器访问 http://localhost:8080,你会看到熟悉的 “Welcome to nginx!” 页面。这就是我们用代码定义出来的 Web 服务。

  1. 状态管理与清理

OpenTofu 会生成一个 terraform.tfstate 文件保存当前资源状态,千万不要手动修改。
当你不需要这个容器时,执行:

tofu destroy

再次输入 yes,所有资源将被安全清除,不留残留。

  1. 与 Terraform 的兼容性

如果你从 Terraform 迁移,只需要把 terraform 命令替换为 tofu,terraform.tfstate 可以无缝继续使用。社区还提供了迁移工具 tf2tofu,可以自动重命名相关文件和模块引用。

  1. 进阶:加入变量和输出

为了让配置更灵活,我们创建 variables.tf:

variable "container_name" {
  default = "my-nginx"
}
variable "host_port" {
  default = 8080
}

修改 main.tf 中的 name 和 external 为 var.container_name 和 var.host_port。

然后创建 outputs.tf:

output "nginx_url" {
  value = "http://localhost:${var.host_port}"
}

再次 tofu apply 后,会在终端直接输出访问地址。这就是 IaC 的基本玩法。

结语

OpenTofu 的出现让基础设施自动化真正回归社区。通过这个简单的 Docker 部署教程,你会发现它上手难度几乎为零。下一步,你完全可以把这个模式迁移到 AWS、阿里云等云平台,用代码管理自己的所有云端资源。