Open6
Docker導入する。with Terraform ,Azure

前提
- docker desktopをインストール済み
- GUIを使わないとしても機能がPCにインストールされる
フロー
- DockerFile作る
- compose.yamlを作る
知識
* Q: Dockerって便利すぎじゃない?どうしてnodeとかの環境用意できるの?
* A:Docker Hubから引っ張ってきている。

留意点
- docker-compose.yamlのversion: '3.9'のようなversion指定は不要
- docker-compose.yamlではなくcompose.yaml推奨

# 開発環境全体を定義する
services:
app:
build:
# コンテナを起動する設定
# compose.ymlと同じディレクトリにあるDockerfileでコンテナをビルドする
context: .
ports:
# 左側の値がhttp://localhost:XXXXの数値
- "12000:3000"
volumes:
# 「現在のディレクトリ」と「コンテナ内の/app/ディレクトリ」が同期される
# コンテナはエディタとリアルタイムで同期している
- .:/app
# ホストのnode_modulesをコンテナの/app/node_modulesと同期
# (git cloneした他の人がプロジェクトをダウンロードした場合に、ホストのnode_modulesとコンテナのnode_modulesが異なるため)
- node_modules:/app/node_modules
command:
# コンテナ起動時に実行するコマンド
sh -c "npm run dev"
environment:
#typescriptでのホットリロード設定
- WATCHPACK_POLLING=true
volumes:
node_modules:
# Dockerfileではアプリケーションの実行環境を定義する
# ベースイメージ
FROM node:20.11.1
# コンテナ内のディレクトリを/appに移動する
# 作業ディレクトリの設定
WORKDIR /app
# 依存関係のインストール
# 現在のディレクトリのpackage.jsonをコンテナ内のディレクトリ(現在は/appディレクトリ)にコピーします。
COPY ./package.json ./
# コンテナ内のディレクトリ(/app)でnpm installを実行します。
RUN npm install
# run devなどはcompose.yamlに任せる

- Build your container:
docker build -t nextjs-docker .
Run your container:docker run -p 3000:3000 nextjs-docker

TerraformでAzure Container Registry (ACR) の作成と検証
terraform/azure/acrディレクトリ
terraform/azure/acr/main.tf
# main.tf
provider "azurerm" {
features {}
}
variable "resource_group_name" {
description = "MySQL Flexible Serverを作成するAzureリソースグループ"
type = string
default = "organization-project-environment-rg"
}
variable "location" {
description = "リソースをデプロイするAzureリージョン"
type = string
default = "japaneast"
}
resource "azurerm_container_registry" "acr" {
name = "organizationprojectenvironmentacr" # ACRの名前。ハイフンは使えない。全て小文字に
resource_group_name = var.resource_group_name
location = var.location
sku = "Basic"
admin_enabled = true # 管理者アカウントを有効にする
tags = { # タグ付けする
organization = "organization"
environment = "environment"
project = "project" # 全て小文字
}
}
output "container_registry_login_server" {
description = "The login server URL for the Azure Container Registry" # 説明文
value = azurerm_container_registry.acr.login_server
}
Dockerレジストリの名前には大文字を使用できないため、すべて小文字で指定する必要があります。
organizationprojectenvironmentacrこの部分がorganizationProjectEnvironmentAcr.azurecr.io/Dockerイメージ名:latest .ここで、レジストリ名になる。
Terraform の初期化:
main.tf ファイルを作成した後、terraform/azure/acrで、Terraform を初期化します。
terraform init
Terraform の検証
terraform plan -out=tfplan
terraform plan の結果をファイルに保存し、そのファイルを使用して terraform apply を実行する
Terraformの適用
初期化が完了したら、ACR を作成するために Terraform を適用します。
terraform apply tfplan
プロンプトが表示されたら、yes と入力してリソースの作成を確認します。
プロジェクトルートディレクトリ
Docker イメージのビルドとプッシュ
ACR が正常に作成されたら、Docker イメージをビルドして ACR にプッシュします。
# Azure CLIにログイン
az login
# ACRにログイン
az acr login --name organizationProjectEnvironmentAcr
# Dockerイメージのビルド
docker build -t organizationprojectenvironmentacr.azurecr.io/Dockerイメージ名:latest .
# ACRにプッシュ
docker push organizationprojectenvironmentacr.azurecr.io/Dockerイメージ名:latest
latestはタグ
Dockerイメージ名にはorganization-project-environment
を入れる