From 9c7fdbb5f6ba0257f3761303dd8d079211113f2d Mon Sep 17 00:00:00 2001 From: Jann Idar Hillestad Date: Fri, 22 Nov 2024 00:28:10 +0100 Subject: [PATCH] Blog post complete --- content/blog/Dockerizing-Terraform.mdx | 93 +++++++++++++++++++++++++ public/terraform3001.png | Bin 0 -> 11770 bytes 2 files changed, 93 insertions(+) create mode 100644 content/blog/Dockerizing-Terraform.mdx create mode 100644 public/terraform3001.png diff --git a/content/blog/Dockerizing-Terraform.mdx b/content/blog/Dockerizing-Terraform.mdx new file mode 100644 index 0000000..2be59d5 --- /dev/null +++ b/content/blog/Dockerizing-Terraform.mdx @@ -0,0 +1,93 @@ +--- +title: Dockerizing Terraform +description: Terraform is an amazing IaC tool. You can use Docker to run Terraform in a containerized environment. I'll share what I leared about Dockerizing Terraform. +date: 2024-11-21 +published: true +tags: ["docker", "azure", "terraform", "iac"] +--- + +
+
+ Terraform3001 +
+
+ Docker1001  +
+
+ +# Why run Terraform in a Container? + +I like to keep my development environment as clean as possible. Containers are +a great way to do that. You can run Terraform in a containerized environment to +keep your host machine clean. You can also use containers to run Terraform in a +CI/CD pipeline. + +# Prerequisites + +- Docker +- A working directory with Terraform files +- An environment which supports Terraform (e.g. Azure, AWS, GCP) +- ARM_ACCESS_KEY environment variable (for Azure) + +# Docker Image + +We will be using the official HashiCorp Terraform Docker image. You can find +the image on Docker Hub at [https://hub.docker.com/r/hashicorp/terraform](https://hub.docker.com/r/hashicorp/terraform). + +# Running Terraform in a Container + +You can run Terraform in a container using the following commands. The commands mount the current working directory to the container using `-v` and `-w` parameters, and set the `ARM_ACCESS_KEY` environment variable using the `-e` parameter. After running the commands, the containers are removed using the `-rm` parameter. + +## terraform init + +```bash +docker run -i -t --rm -v "$(pwd):/workspace" -w /workspace -e ARM_ACCESS_KEY=$ARM_ACCESS_KEY hashicorp/terraform:latest init +``` + +## terraform plan -out=main.tfplan + +```bash +docker run -i -t --rm -v "$(pwd):/workspace" -w /workspace -e ARM_ACCESS_KEY=$ARM_ACCESS_KEY hashicorp/terraform:latest plan -out=main.tfplan +``` + +## terraform apply main.tfplan + +```bash +docker run -i -t --rm -v "$(pwd):/workspace" -w /workspace -e ARM_ACCESS_KEY=$ARM_ACCESS_KEY hashicorp/terraform:latest apply main.tfplan +``` + +## terraform destroy + +```bash +docker run -i -t --rm -v "$(pwd):/workspace" -w /workspace -e ARM_ACCESS_KEY=$ARM_ACCESS_KEY hashicorp/terraform:latest destroy +``` + +# Using Aliases + +As you probably noticed, the commands to run Terraform in a container are quite +long and cumbersome. I created aliases in my `.zshrc` file to make it easier to +run Terraform in a container. Here are the aliases I use: + +```bash +# Dockerized Terraform +alias dtfinit="docker run -i -t --rm -v "$(pwd):/workspace" -w /workspace -e ARM_ACCESS_KEY=$ARM_ACCESS_KEY hashicorp/terraform:latest init" +alias dtfinitrc="docker run -i -t --rm -v "$(pwd):/workspace" -w /workspace -e ARM_ACCESS_KEY=$ARM_ACCESS_KEY hashicorp/terraform:latest init -reconfigure" +alias dtfplan="docker run -i -t --rm -v "$(pwd):/workspace" -w /workspace -e ARM_ACCESS_KEY=$ARM_ACCESS_KEY hashicorp/terraform:latest plan -out main.tfplan" +alias dtfapply="docker run -i -t --rm -v "$(pwd):/workspace" -w /workspace -e ARM_ACCESS_KEY=$ARM_ACCESS_KEY hashicorp/terraform:latest apply main.tfplan" +alias dtfdestroy="docker run -i -t --rm -v "$(pwd):/workspace" -w /workspace -e ARM_ACCESS_KEY=$ARM_ACCESS_KEY hashicorp/terraform:latest destroy" +alias dtfrefresh="docker run -i -t --rm -v "$(pwd):/workspace" -w /workspace -e ARM_ACCESS_KEY=$ARM_ACCESS_KEY hashicorp/terraform:latest refresh" +``` + +# Conclusion + +Running Terraform in a container is a great way to keep your development +environment clean. It is a good thing that Hashicorp provides an official +Terraform Docker image. I try to use containers as much as possible in my +workflow to learn more about containers and to get ready to move on to +CI/CD pipelines and kubernetes soon. I hope you found this article helpful. +Let me know if you have any questions or suggestions. diff --git a/public/terraform3001.png b/public/terraform3001.png new file mode 100644 index 0000000000000000000000000000000000000000..e604c32a51543ff585ff38ab5c581c5ca50d8322 GIT binary patch literal 11770 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 literal 0 HcmV?d00001