前回 Azure Container Instances にデプロイするまでをトライしました。ステートレスなコンテナならば十分だったりしたのですが、やはりデータを保持したいのでデータベースをコンテナで用意してみることにしました。
Azure のマネージドなデータベースのサービスを使う方法も当然あります。むしろ自身のメンテナンスコストを下げていくには積極的に使った方がいいでしょうね。今回は規模も大きくなくこぢんまりと趣味用データベースという位置づけでコンテナで用意する方法を採用しました。
Azure Storage を用意
永続化のために Azure Storage でストレージアカウントを作成し、コンテナ側でもマウントできるものを用意しました。今回の場合はファイル共有で作成しました。実際には前回に引き続き、docker のコマンドで操作をして、このときには以下のコマンドでした。
docker volume create aci-db-volume --storage-account (ストレージアカウント名)
DB コンテナにマウントする
作成した共有ファイル(ボリューム)を DB コンテナにマウントします。そのために以下に示すように docker-compose.yml などの構成ファイルを編集します。
(docker-compose.yml より DB のコンテナ部分)
db:
image: mysql:5.7
volumes:
- dbdata-volume:/var/lib/mysql
container_name: flask_db
expose:
- "3306"
(省略)
volumes:
dbdata-volume:
driver: azure_file
driver_opts:
share_name: aci-db-volume
storage_account_name: (ストレージアカウント名)
データベースの保存ディレクトリをボリュームマウントする形にしてあり、それが Azure Storage より供給される設定です(デプロイなしでローカルで動かすときなどは、 driver: local の設定だったりしました)
ここで注意点として、 今回紹介したボリュームのマウント方法では mysql を使う場合でのみ成功しました。 MariaDB を使う場合ではどのバージョンでも成功せずでした。
MariaDB を使う場合にはどのような方法が採れるのか、まだ分かっておりません (情報求む状態です)。
ホスト名の設定について
前回簡単にデプロイできたのですが、 IP アドレスの確認がしづらいことも課題でした。ダッシュボードから確認したり、コンテナの転送ポート状況から判断したりする必要がありました。
設定により FQDN の名前を決めることができます。 docker-compose.yml ファイルにつき1つのホスト名が設定できます。メインのコンテナあたりで、domainname 項を設定することにより以下の名前が FQDN として設定されます。
(指定したdomainname).(リージョン).azurecontainer.io
これにより、アクセスがしやすくなると思います。
実際には名前衝突してしまうと使えなくなるので、信頼性としては良くない部分もあります。手順を踏んで静的な IP および FQDN を取得してネットワーク構造を組んだ方がよさそうです。