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?

DockerではじめるTerraform【構築編】

0
Last updated at Posted at 2025-12-09

はじめに

本記事ではWindows環境でTerraformを使用して、
Docker環境上にNginxを構築する内容となります。

事前準備(想定環境)💻

  • Windows11 環境 (シェル:PowerShell)
  • WSL2インストール済 (検証環境:WSL バージョン: 2.6.1.0)
  • Dockerの準備(DockerDesktopをセットアップ済み)
  • Terraformインストール済み

Terraformのインストール手順はこちら:point_down:
DockerではじめるTerraform【インストール編】

環境構築方法

  • リソースを作成する ( TFファイルの作成 )

✅ Terraformの構成ファイルを管理するためのディレクトリを作成します
(例ではディレクトリ名をtftestで作成)

PS C:\Users\User001> mkdir tftest

✅ 作成した管理ディレクトリ内にmain.tfファイルを作成します
コードを記述する空ファイルをテキストエディタ、または下記コマンドで作成します

PS C:\Users\User001\tftest> New-Item main.tf

✅ テキストエディタでmain.tfを開いて、下記コードを記述する

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

provider "docker" {
  host = "npipe:////./pipe/docker_engine"
}

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

resource "docker_container" "nginx" {
  image = docker_image.nginx.image_id
  name  = "test1207"
  ports {
    internal = 80
    external = 8000
  }
}

【コード内容】
📝terraformブロック:
プロバイダーへの要求事項を設定しています。
required_providersブロックで、「docker」として
Terraformレジストリのプロバイダー
kreuzwerker/docker」を指定しています。
また、バージョンは3.0.0以上を明示的に指定しています。

📝providerブロック:
dockerプロバイダーの設定を記述しています。
hostでWindows環境のDocker Desktopが提供する
Docker Engineに接続するパスを指定しています。
Windows環境のデフォルトでは名前付きパイプ ( Named Pipe)
使用するため、 記述は下記になります。

  host = "npipe:////./pipe/docker_engine"

なお、下記のように記述することも可能です。🛟
hostパラメーターを完全に削除し、暗黙的にDockerプロバイダに対して、
Windows環境のデフォルトの接続方法(名前付きパイプ)を使用させる

provider "docker" {}

📝resource "docker_image" ブロック:
Terraformを使用して、Dockerホスト上にDockerイメージを作成・管理するための設定です。
下記はDockerイメージの名前とタグを指定しています。

name = "nginx:latest"

下記はTerraformの管理対象からリソースが削除された場合に
(例えば、コードからこのブロックを削除してterraform applyを実行した時)
ローカル環境に残っているイメージファイルを削除するかどうかを制御します。

keep_locally = true

true: ローカルのDockerホスト上にはイメージを残す
false: ローカルのDockerホスト上にはイメージを残さない(削除)

📝resource "docker_container" ブロック:
Terraformを使ってDockerホスト上にDockerコンテナを作成・管理するための設定です。(Dockerコンテナの宣言)

resource "docker_container" "nginx":
  • ''resource'' ← リソース定義を示します。

  • ''docker_container'' ← 使用するリソースのタイプです。

  • "nginx" このリソースのローカル名です。

image = docker_image.nginx.image_id
  name  = "test1207"
  ports {
    internal = 80
    external = 8000
  • ''image'' ←コンテナ作成に使用するDockerイメージを指定。
  • ''name'' ←Dockerホスト上で実行されるコンテナの名前を指定。
         例ではコンテナ名を"test1207"に設定しています。
  • ''ports'' ←ホストOSとコンテナ間でポートマッピングを設定。
    internal = 80:コンテナ内でサービス(Nginxなど)がListenする内部ポートを指定。
    external = 8000:ホストOSの外部ポートを指定。
    :writing_hand:ホストの8000番ポートへのアクセスがコンテナの80番ポートに転送されます。

初期化 ( terraform init ) 

PS C:\Users\User001\tftest> terraform init

上記のコマンドを実行することにより以下の処理が実行されます。

  • プロバイダーのインストール
  • バックエンドの初期化設定
  • モジュールのインストール

コマンドが正常に実行されると下記のメッセージが表示されます。

Terraform has been successfully initialized!

You may now begin working with Terraform.  
Try running "terraform plan" to see any changes  
that are required for your infrastructure.  
All Terraform commands should now work.

initコマンドを実行した段階でディレクトリ内でセットアップが実行されます
Terraformリソース管理フォルダ( tftestフォルダ )配下に
.terraformディレクトリが作成され、利用するプロバイダーが設定されます。

PS C:\Users\User001\tftest> tree ./
C:\USERS\User001\TFTEST
└─.terraform
    └─providers
        └─registry.terraform.io
            └─kreuzwerker
                └─docker
                    └─3.6.2
                        └─windows_amd64

構築 ( terraform plan )

terraform planコマンドを実行することにより、
何がどのように追加、変更されるかという構築プランが表示されます。

【出力例】
Terraform will perform the following actions:
【-- 中 略 --】

Plan: 2 to add, 0 to change, 0 to destroy.

🚨この段階で、文法ミスによるエラーがある場合は判明します 🚨

【エラー出力例】
Planning failed.  
Terraform encountered an error while generating this plan.

実行 ( terraform apply )

terraform applyコマンドを実行後、作成したコードに従い、
Dockerコンテナ環境(nginx)が自動で構築されます。

PS C:\Users\User001\tftest>  terraform apply

コマンドを実行すると、構築される環境情報が表示された後、
最終確認メッセージが表示されるので、「yes」を入力して処理を実行します。

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

下記の出力結果が確認できれば成功です。

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

環境デプロイ後のコンテナ確認

Apply complete!メッセージを確認後、「docker ps」コマンドで
コンテナの動作を確認すると、コード内で定義した「test1207」コンテナが
ポート8000番で待ち受けしていることが確認できます。

PS C:\Users\User001\tftest> docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS          PORTS                       NAMES
556df710faa7   553f64aecdc3           "/docker-entrypoint.…"   11 minutes ago   Up 11 minutes   0.0.0.0:8000->80/tcp        test1207

ブラウザでhttp://localhost:8000/を開くと、Nginxの動作を確認できます。
nginx_defaultPIC_20251209.png

環境削除(後片付け) ( terraform destory )

構築したコンテナ環境の削除はterraform destoryで実行されます。

PS C:\Users\User001\tftest>  terraform destroy

コマンドを実行すると、下記の最終確認メッセージが表示されるので、
「yes」を入力して処理を実行します。

Plan: 0 to add, 0 to change, 2 to destroy.

Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure,  
as shown above.
There is no undo. Only 'yes' will be accepted to confirm.

Enter a value: yes

下記の出力結果が確認できればコンテナ環境削除は成功です。

Destroy complete! Resources: 2 destroyed.

おわりに

ここまで読んでいただいた皆様、
誠にありがとうございました。😎

本記事はWindowsのローカル環境でTerraformの実行環境を
構築することで、コストを抑えてTerraformの動作検証をしたい
という個人的なモチベーションから、備忘録を兼ねて
環境構築手順をまとめて:writing_hand:共有することを考えました。

本記事の内容が、何かしらのお役に立てれば幸いです。:bow_tone1:

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?