Azure で WordPress の検証環境を用意する場合、Azure Database for MySQL を用意して VNET 統合したり、維持するのにそれなりの利用料金が発生したりするので、Terraform で簡単に作っては削除してを繰り返していました。インフラ構成を検証するのではなく、単に WordPress の機能検証を Azure App Service 上で行い、数日間その環境を維持したい場合、もっと安くできなかと思っていました。そこで MySQL もコンテナーで動かしたら良いのではと思い立ち、実際に Azure App Service で WordPress と MySQL のマルチコンテナーを試してみました。
ローカルで Docker Compose を試す
appservice-docker-wordpress.yml
version: '3.3'
services:
db:
image: mysql:8.0.35
volumes:
- db:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- wordpress:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db:
wordpress:
bash
# ローカルで WordPress + MySQL の動作検証
docker compose -f appservice-docker-wordpress.yml up -d
# ローカルで WordPress + MySQL を停止
docker compose -f appservice-docker-wordpress.yml down
# 再起動後も WordPress + MySQL が動作するか検証
docker compose -f appservice-docker-wordpress.yml up -d
# ボリュームも削除して検証終了
docker compose -f appservice-docker-wordpress.yml down --volumes
Azure App Service 検証環境を構築
bash
# 環境変数にセット
prefix=mnrdwp
region=japaneast
# リソースグループを作成
az group create \
--name ${prefix}-rg \
--location $region
# App Service Plan を作成
az appservice plan create \
--name ${prefix}-plan \
--resource-group ${prefix}-rg \
--sku B1 \
--is-linux
# Web App for Container の Compose 版を作成
az webapp create \
--name ${prefix}-app \
--resource-group ${prefix}-rg \
--plan ${prefix}-plan \
--multicontainer-config-type compose \
--multicontainer-config-file appservice-docker-wordpress.yml
# 「常時接続」をオンに設定
az webapp config set \
--name ${prefix}-app \
--resource-group ${prefix}-rg \
--always-on true
検証環境の作成直後の様子
コンテナーが Web App にダウンロードされた直後の最初のアクセス時は Error establishing a database connection
が表示されました。
1 分後くらいにアクセスすると、DB の準備が整ったのか、WordPress のインストール画面が表示されました。
参考