第12回: 本番運用チェックリスト(Docker版) — リリース前に必ず確認すべき10の観点
開発環境で動いたDocker構成をそのまま本番に持っていくと、深刻なトラブルが起きることがあります。「イメージタグが latest のまま」「パスワードが secret」「ヘルスチェックなし」——どれか1つでも本番環境で放置すると、障害や情報漏洩につながるリスクがあります。
Category
開発環境で動いたDocker構成をそのまま本番に持っていくと、深刻なトラブルが起きることがあります。「イメージタグが latest のまま」「パスワードが secret」「ヘルスチェックなし」——どれか1つでも本番環境で放置すると、障害や情報漏洩につながるリスクがあります。
Laravelプロジェクトに新メンバーが参加するとき、環境構築だけで1日以上かかることは珍しくありません。PHPのバージョン、Composerのバージョン、MySQL設定……手順書が古くなっていることも多く、試行錯誤が続きます。
PHPとMySQLの開発環境をローカルに手動インストールすると、バージョンの違い・設定の差異・パスの問題など、環境固有のトラブルが絶えません。チームで開発するならなおさらです。
開発環境には「デバッグツール」「ソースコードのバインドマウント」「パスワードの簡略化」など、本番に含めてはいけない設定が多く含まれます。同じファイルを使い回すと、デバッグ機能が本番に混入したり、ソースコードが誤った場所からロードされるリスクがあります。
これはよくあるトラブルです。dependson: db を設定していても、DBのプロセスが起動しただけで「接続を受け付けられる状態」にはなっていない、という状況で起きます。
MYSQLROOTPASSWORD: secret をそのまま compose.yml に書いてGitにコミットすると、リポジトリに秘密情報が残り続けます。これはセキュリティ上の深刻なリスクです。
アプリ・DB・キャッシュを別々に docker run で起動し、毎回コマンドを打つのは非効率です。コマンドが長くなるほど間違いも増えます。
DockerでPHPとMySQLを別々のコンテナで動かし、PHPから localhost でMySQLに接続しようとすると失敗します。「同じマシンで動いているのになぜ?」——これはDockerネットワークの仕組みを知ると一瞬で解決します。
Dockerを使い始めて最初に驚くのが「コンテナを削除したら、入力していたデータが全部消えた」という体験です。これはDockerの仕様通りの動作ですが、知らないとひどく焦ります。
Dockerを使い始めた多くの人が経験するのが「ビルドは成功したのにコンテナが起動しない」「停止したはずのコンテナがまだ残っている」というトラブルです。これらの多くは、ビルド・起動・停止という3つの操作の関係が曖昧なことで起きます。