0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TerraformでローカルDockerのnginxを動かしてみた件

0
Last updated at Posted at 2026-06-15

【Windows版】TerraformでローカルDockerのnginxを動かしてみた件

どうも、拓田です。
「Terraformってクラウドを使わないといけないんでしょ?」と思っていたんですが、
ローカルのDockerだけでも動かせることがわかったので、入門として試してみました。
※動きを見るだけであれば、パブリッククラウドやGitHubと連携せずともローカルで実行できます。初めての方はお試しください。
※本記事ではWindows11の環境の手順になります。

Terraformって何?

インフラを「コード」で管理するツールです。これを IaC(Infrastructure as Code) と呼びます。
AWSやGCPといったパブリッククラウド上にサーバーやネットワークを構築する際、
通常は管理コンソール(画面)を操作しますが、Terraformを使うとその作業をコードで書いて自動化できます。

「どんな環境を作るか」をファイルに書いておくと、Terraformがその通りに作ってくれます。
手動操作のミスがなくなり、同じ環境を何度でも再現できるのが大きなメリットです。

今回はクラウドではなくローカルのDockerを対象にしますが、書き方の基本はクラウドでも同じです。

最初からGitHubやクラウドは不要

Terraformと聞くとAWSやGCPなどクラウドのイメージが強いですが、
ローカルのDockerを操作するだけなら、GitHubもクラウドアカウントも一切不要です。

手元のPCだけで完結するので、まずはここから始めるのがおすすめです。

事前準備

Chocolateyのインストール

WindowsではパッケージマネージャーのChocolateyを使うのが簡単です。

PowerShellを管理者として実行し、以下を貼り付けて実行します。

Set-ExecutionPolicy Bypass -Scope Process -Force; `
[System.Net.ServicePointManager]::SecurityProtocol = `
[System.Net.ServicePointManager]::SecurityProtocol -bor 3072; `
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

完了したらPowerShellを一度閉じて、再度開きます。

Terraformのインストール(Chocolatey経由)

choco install terraform -y

インストール後、以下で確認できます。

terraform -v

バージョンが表示されれば成功です。

Docker Desktopのインストール

Terraformと同様に、Chocolateyでインストールできます。

choco install docker-desktop -y

インストール完了後、PCを再起動します。

再起動後、スタートメニューから「Docker Desktop」を起動します。
タスクバーにクジラのアイコンが表示され、「Docker Desktop is running」と出れば準備完了です。

動作確認はPowerShellで以下を実行します。

docker -v

バージョンが表示されれば成功です。

コードを書く(main.tf)

作業フォルダに main.tf というファイルを作り、以下を書きます。

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

provider "docker" {}

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

resource "docker_container" "nginx" {
  name  = "nginx-local"
  image = docker_image.nginx.image_id

  ports {
    internal = 80
    external = 8080
  }
}

コードの意味

ブロック 内容
terraform {} 使用するプロバイダー(今回はDocker)を宣言
provider "docker" {} DockerとTerraformの接続設定(Windowsは空でOK)
docker_image 取得するDockerイメージ(nginx:latest)
docker_container 起動するコンテナの設定

Mac/Linuxだと host = "unix:///var/run/docker.sock" という記載を見かけることがあります。
これはLinux/Mac向けの書き方で、TerraformがDockerに通信するための接続先として定義しています。そのためWindowsでは書かなくて大丈夫です。
provider "docker" {} を空のままにしておくと、OS環境を自動判別して接続してくれます。

実行手順

1. terraform init(初回のみ)

必要なプロバイダーをダウンロードします。main.tf があるフォルダで実行してください。

terraform init

VSCodeを使っている場合、ターミナルを開くと自動的に作業フォルダが設定されているので、そのまま実行できます。

2. terraform plan(確認)

実際に何が作られるか確認します。

terraform plan

3. terraform apply(実行)

実際にコンテナを起動します。

terraform apply

途中で確認が入ります。

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:

yes と入力してEnterを押すと、コンテナが起動します。

4. 動作確認

docker ps で確認します。

CONTAINER ID   IMAGE          PORTS                  NAMES
060ca1a2017a   fffffc90d343   0.0.0.0:8080->80/tcp   nginx-local

nginx-localUp になっていればOKです。
ブラウザで http://localhost:8080 を開くと、nginxの画面が表示されます。

5. terraform destroy(削除)

コンテナを削除したい時はこちら。こちらも yes の確認があります。

terraform destroy

実行すると、作成したコンテナとイメージが削除されます。

手動のDockerコマンドとの違い

操作 Dockerコマンド Terraform
起動 docker run -d -p 8080:80 --name nginx-local nginx terraform apply
削除 docker stop nginx-local && docker rm nginx-local terraform destroy
構成確認 コマンド履歴を見る main.tf を見る

コマンドを覚えなくてもコードを見れば構成がわかるのがTerraformの強みです。

まとめ

  • Terraformはローカル環境だけでも試せる
  • GitHubもクラウドも不要でOK
  • terraform apply でインフラを作り、terraform destroy で消せる
  • 構成がコードとして残るので、後から見返しやすい

まずはローカルで感覚をつかんでから、クラウドに挑戦するのがおすすめです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?