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

推荐订阅源

Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
SecWiki News
SecWiki News
Forbes - Security
Forbes - Security
N
News | PayPal Newsroom
S
Security @ Cisco Blogs
Schneier on Security
Schneier on Security
V
V2EX - 技术
S
Secure Thoughts
W
WeLiveSecurity
Google DeepMind News
Google DeepMind News
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
S
Securelist
S
Security Archives - TechRepublic
Know Your Adversary
Know Your Adversary
V
Vulnerabilities – Threatpost
Security Latest
Security Latest
Recent Commits to openclaw:main
Recent Commits to openclaw:main
G
GRAHAM CLULEY
H
Hacker News: Front Page
Microsoft Azure Blog
Microsoft Azure Blog
I
Intezer
Google Online Security Blog
Google Online Security Blog
美团技术团队
阮一峰的网络日志
阮一峰的网络日志
T
The Exploit Database - CXSecurity.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Webroot Blog
Webroot Blog
Jina AI
Jina AI
Engineering at Meta
Engineering at Meta
P
Proofpoint News Feed
The Cloudflare Blog
I
InfoQ
L
LangChain Blog
U
Unit 42
P
Proofpoint News Feed
S
Schneier on Security
S
Security Affairs
Y
Y Combinator Blog
T
Tenable Blog
N
News and Events Feed by Topic
MyScale Blog
MyScale Blog
量子位
Google DeepMind News
Google DeepMind News
Cyberwarzone
Cyberwarzone
博客园 - 聂微东
D
Darknet – Hacking Tools, Hacker News & Cyber Security
GbyAI
GbyAI
AWS News Blog
AWS News Blog

liseezn'blog

在Zeabur部署Rhex现代论坛 – liseezn'blog Rhex论坛接入DeepSeek 踩坑实录 – liseezn'blog SVGcode 一键部署到 Zeabur – liseezn'blog Edge密码危机自救:1小时的迁移双持方案 – liseezn'blog Token到底是什么意思 – liseezn'blog 使用Next.js重构主页 – liseezn'blog 入手两个4字母域名 – liseezn'blog SEE~Friends 3.4.0 版本更新|从稳定可用,到好用耐用 – liseezn'blog 解决Docker构建PHP8.2+XLoad镜像常见报错,附国内加速+GitHub推送指南 – liseezn'blog SEE~Friends v3.1.0 版本更新|更稳定的友链管理,体验再升级 – 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 开源一款BMI+体脂率综合计算器 – liseezn'blog 学生综合素质评价系统操作教程 – liseezn'blog 轻松迁移网站:使用UpdraftPlus完整教程 – liseezn'blog Steam史低折扣 – liseezn'blog DeepSeek + Xmind:轻松把 PDF、Word 文档转思维导图!pdf/word文档转思维导图 – liseezn'blog Argon主题博客美化 – liseezn'blog 有自己的域名啦 – liseezn'blog LXZCMC我的世界服务器 – liseezn'blog Wordpass_Argon主题安装 – liseezn'blog 我开了属于自己的 MC 服务器:LxZCMC,给每一份热爱一个落脚的方块天地 – liseezn'blog ComfyUI 实战:从安装到生成第一张 AI 绘画 – liseezn'blog n8n 入门:用可视化工作流打造你的专属自动化工具 – liseezn'blog Ollama从入门到进阶:在你的电脑上运行大模型 – 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、阿里云等云平台,用代码管理自己的所有云端资源。