自分で言うのも何ですが、最近、ここが当たらない競馬予想ブログになりつつありますが、コツコツと裏で進めていたことがあります。
それがこのサイトのコンテナ化。
やっとそれが終わって、4 月初旬から、docker 上で、Debian の公式イメージに Apache と Perl をインストールしたカスタマイズイメージと、WordPress の公式イメージの中の PHP-FPM のイメージ、MariaDB の公式イメージで、サイト全体が動いています。
なぜコンテナ化する必要があるのか?
最大の理由は、現在、CentOS で動作しているこのサイトですが、次回の移行先が CentOS とは限らないためです。その移行先に CentOS Stream と言う選択肢はあるかも知れませんが、ないかも知れない。その不確定要素を、「docker さえ動けば、OS は何でも良い」としておけば、移行先の選択肢が広がります。
さらに、このサイトだけではなく、他のサイト構築をお手伝いするときに、Apache や PHP 、MariaDB のバージョンがどうだ、それをどこからとって来るだ、OS によっては設定の作法も違いますし、それに対してチューニングだ、何だの細かい設定ポイントなどを全部、そのたびにドキュメント化するより、ごりごり docker 関連ファイルを書いて…
docker compose up -d
の方が楽じゃないか d(^^;A と…もちろん、データを永続化しておけば、移行も楽ちん!…のはずという目算でせっせと取り組んでおりました。
一筋縄では当然、行きませんでした
このサイト全部をコンテナ化するために、解決しなければならない問題はいくつかあったのですが、一番大きな問題は、blosxom のデータをコンテナで動かすと言うところでした。
WordPress をコンテナで動かすだけであれば、Hello, World 的ドキュメントはごまんとありますし、それこそ WordPress の公式イメージがあります。
WordPress の公式イメージの dockerfile を弄くり倒して、Perl の実行環境+ blosxom を動かすためのプラグイン一式をインストールとか、結構、泥臭いこともやってみましたが、なんとなく美しくない。
そんな試行錯誤を何度も続け、行き着いた結論は WordPress の公式イメージからは PHP-FPM だけを使い、これと連携する blosxom 実行環境を Debian の公式イメージからビルドする形でした。
最初のトラブル
細かい部分は、後々ドキュメント化するとして、今回、一通りローカルの環境で、動作確認の終わった関連ファイルをサーバーにアップして、いざ、移行となったときに遭遇した最初のトラブルについて。
docker デーモンが起動しない! orz
もちろん、この移行を始める前に、docker をインストールして、動作することは確認しました。が、いつの間にか、動いていた docker デーモンが動かなくなっていました。調べてみると、以下のような感じのエラーが出ていて、どうもストレージドライバー云々と言っているようです。
failed to start daemon: error initializing graphdriver: prior storage driver …
これを手がかりに進めていくと、docker の過去のリリースノートに、devicemapper ストレージドライバーは廃止が決定され、overlay2 に変わりますという記述があり、docker エンジンが v23 にバージョンアップしたタイミングで、明示的に devicemapper を明示的に指定してやらないと、デフォルトの overlay2 をストレージドライバとして使おうとして起動に失敗するようになったのではないかと、あたりをつけて、/etc/docker に以下の内容の daemon.json ファイルを作成してやると、無事起動しました。
{
"storage-driver": "devicemapper"
}
この結論に至るまでも、相当、すったもんだあったのですが、その道筋を説明すると、それで一つドキュメントができてしまうので詳細は説明しませんが、CentOS 7 ( Kernel が 3.x で動いている)で、ファイルシステムが XFS でフォーマットされている場合、この事象が起こる可能性があります。
ひとまず上手くいったので…
docker デーモンが起動さえしてしまえば、事前に検証して、組み立てた手順で、無事、コンテ環境へ移行できました。
まだほとんどチューニングと言うほど設定を作り込んでいないのですが、思っていた以上に、キビキビ動作していい感じです。ひとまず、ここまでの情報をドキュメントにまとめて、ここはこのまま運用しますが、昨今、HTTPS で動作するようにしないと他に展開できない昨今なので、そちらの研究を… Let’s Encrypt を前提に、証明書まわりをどうするかを今後、試行錯誤して進めていくつもりです。