# Hello world 在当前的这个示例中,您将通过云原生构建实现,使用 `terraform` 来管理你的 `Docker` 容器。 # Prerequisites 1. 了解 [terraform](https://developer.hashicorp.com/terraform) 相关基础知识,基本概念和命令,如terraform init、terraform plan、terraform apply和terraform destroy等。 2. 使用 [云原生构建(CNB)](https://cnb.cool) 来管理你的Terraform配置文件,以便进行版本管理和协作开发。 # Review example configuration 根目录的 `main.tf` 文件定义了一个访问本地 `Docker` 的镜像和容器资源。这是一个创建 nginx docker 容器的应用程序。 `terraform` 使用了 `kreuzwerker/docker` 的 `provider` 程序,创建了两个资源 1. 创建了一个镜像资源,拉取 `nginx:latest` 镜像 2. 使用上一个镜像资源,创建了一个容器资源,并开放端口 `8000` 映射到容器内的 `80` 端口 ```terraform terraform { required_providers { docker = { source = "kreuzwerker/docker" version = "~> 3.0.1" } } } provider "docker" {} resource "docker_image" "nginx" { name = "nginx:latest" keep_locally = false } resource "docker_container" "nginx" { image = docker_image.nginx.image_id name = "tutorial" ports { internal = 80 external = 8000 } } ``` # Create infrastructure ## 通过云原生构建,使用 `terraform` 完成资源部署和管理 ```yaml master: push: - name: Terraform by Example services: - docker docker: image: hashicorp/terraform stages: - name: docker image ls script: docker image ls - name: docker ps script: docker ps - name: init script: terraform init - name: plan script: terraform plan - name: apply script: terraform apply -auto-approve - name: docker image ls script: docker image ls - name: docker ps script: docker ps ``` terraform流水线运行后,对应 terraform 创建资源情况 ![执行结果示例](./asserts/001.png) 流水线运行后,对应 terraform 创建资源情况和结果 ![执行结果示例](./asserts/002.png) 流水线运行后,创建了一个容器,并开放了端口 ![执行结果示例](./asserts/003.png) ## 云原生开发,创建一个支持 `terraform` 的开发环境 创建 `.ide/Dockerfile` 配置文件,定制云原生开发执行环境 ```Dockerfile FROM hashicorp/terraform as tf FROM node:20 # install vscode and extension RUN curl -fsSL https://code-server.dev/install.sh | sh &&\ code-server --install-extension hashicorp.terraform &&\ echo done COPY --from=tf /bin/terraform /usr/local/bin/terraform ``` 点击 `云原生开发`,创建一个 `Web` 开发环境 ![云原生开发](./asserts/004.png) 在当前开发环境可以直接执行 `terraform` 相关命令,进行 `IaC` 基础设施即代码思想下的Terraform工具实战 ![云原生开发](./asserts/005.png)