😀

Azure App Service で WordPress と MySQL のマルチコンテナーを試してみた

に公開

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 が表示されました。

appservice-docker-wordpress-01.png

1 分後くらいにアクセスすると、DB の準備が整ったのか、WordPress のインストール画面が表示されました。

appservice-docker-wordpress-02.png

参考

https://learn.microsoft.com/ja-jp/azure/app-service/tutorial-multi-container-app

Discussion