【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-local が Up になっていれば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で消せる - 構成がコードとして残るので、後から見返しやすい
まずはローカルで感覚をつかんでから、クラウドに挑戦するのがおすすめです。