こんにちは。よっしーです(^^)
今日は、Terraformを使用したDockerコンテナの破棄についてご紹介します。
背景
先日の記事でTerraformによるDockerのコンテナ起動と修正をしましたので、今回はコンテナの内容を破棄する方法をご紹介します。
ここまで、Terraform を使用してマシン上で Docker コンテナーを作成および更新しました。 この記事では、Terraform を使用してこのインフラストラクチャを破棄します。 インフラストラクチャが不要になったら、それを破棄して、セキュリティ上のリスク、コスト、またはリソースのオーバーヘッドを削減することができます。 たとえば、運用環境をサービスから削除したり、システムの構築やテストなどの短期間の環境を管理したりする場合があります。 インフラストラクチャの構築と変更に加えて、Terraform は管理するインフラストラクチャを破棄または再作成できます。
Terraformのインストール記事に関しては、下記をご覧ください。
TerraformでDockerの構成内容を破棄する
前回は、Terraformを利用してDockerでNGINX サーバーをプロビジョニングしました。今回は、NGINX サーバーを破棄します。
前回の復習
Terraformを利用してDockerでNGINX サーバーをプロビジョニングした手順は下記になります。
# 作業ディレクトリの作成
mkdir learn-terraform-docker-container
# 作業ディレクトリの移動
cd learn-terraform-docker-container
# tf用のファイルを作成
vi main.tf
# 初期化
terraform init
# Dokcerコンテナ起動 : localhost:8000 でnginxが起動していることを確認
terraform apply
main.tfの内容は下記になります。
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.0.1"
}
}
}
provider "docker" {}
resource "docker_image" "nginx" {
name = "nginx"
keep_locally = false
}
resource "docker_container" "nginx" {
image = docker_image.nginx.image_id
name = "tutorial"
ports {
internal = 80
external = 8000
}
}
破棄
terraform destroy コマンドは、Terraform プロジェクトによって管理されているリソースを終了します。 このコマンドは、Terraform 状態で指定されたすべてのリソースを終了するという点で、terraform 適用の逆です。 現在の Terraform プロジェクトによって管理されていない、他の場所で実行されているリソースは破棄されません。 作成したリソースを破棄します。
terraform destroy
– プレフィックスは、コンテナーが破棄されることを示します。applyと同様に、Terraform は実行計画を表示し、承認を待ってから変更を加えます。
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
- destroy
Terraform will perform the following actions:
# docker_container.nginx will be destroyed
- resource "docker_container" "nginx" {
yesと答えてこの計画を実行し、インフラストラクチャを破壊します。
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:
apply と同様に、Terraform はリソースを破棄する順序を決定します。 この場合、Terraform は他の依存関係のない単一のコンテナーを識別したため、コンテナーを破棄しました。 複数のリソースがあるより複雑なケースでは、Terraform は依存関係を考慮して適切な順序でそれらを破棄します。
docker_container.nginx: Destroying... [id=e83c8c8a016227af6a5dca13ddd1a2a98584f89b566ca9ee02f3c5bcbe05313f]
docker_container.nginx: Destruction complete after 0s
docker_image.nginx: Destroying... [id=sha256:6405d9b26fafcc65baf6cbacd0211bd624632da10d18cae7dc42220a00eb7655nginx]
docker_image.nginx: Destruction complete after 1s
動作確認
Web ブラウザーで localhost:8080 にアクセスして、Nginxが起動していないことが確認できます。
解説
Terraform destroy
Terraform destroyは、Terraformで管理されているリソースを削除するコマンドです。このコマンドを実行すると、Terraformが管理しているリソースの全てが削除され、インフラストラクチャが完全に破棄されます。
Terraform destroyを実行する前に、Terraform stateコマンドを使用して、Terraformが管理しているリソースの現在の状態を確認することが推奨されます。これにより、誤って削除されるリソースを特定することができます。
Terraform destroyコマンドを実行すると、以下のような作業が行われます。
- Terraformが管理するリソースの定義を読み込みます。
- 定義されたリソースを削除します。削除されたリソースには、クラウドプロバイダのインスタンス、ボリューム、ネットワークなどが含まれます。
- Terraformが管理するインフラストラクチャの状態を更新するために、Terraformが状態ファイルを更新します。
Terraform destroyは、開発環境やテスト環境のクリーンアップに使用することができます。しかし、本番環境のリソースを削除する場合には、慎重に実行する必要があります。不具合が発生した場合には、手動で修正する必要があるため、事前に慎重なプランニングとテストが必要です。また、誤ってリソースを削除することで、データ損失やシステムダウンなどのリスクがあるため、確認を怠らないように注意してください。
おわりに
今日は、Terraformを使用して、Dockerコンテナの構成を破棄する方法をご紹介しました。機会があれば、AWSでインフラ環境を構築する方法をご紹介しようと思います。
今回使用したTerraformのソースは下記のGitHubにあります。
何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント