サービス構成と役割
Docker Infrastructureの3つの主要コンテナの役割と、重要な概念「永続化」について解説します。
1. 各サービスの役割
Nginx (Engine-X)
- 役割: Webサーバー / リバースプロキシ
- Docker Infrastructureでの仕事:
- HTTPS終端: クライアント(ブラウザ)からの暗号化通信を受け取り、復号します。
- 静的コンテンツ配信: 画像やCSSなどを返します。
- PHP処理の転送:
.phpファイルへのリクエストが来たら、WordPressコンテナ(PHP-FPM)へ処理を投げます(FastCGIプロトコル)。
- 特徴: 高速で、多数の同時接続を処理する能力に長けています。
WordPress + PHP-FPM
- 役割: CMS (コンテンツ管理システム) / アプリケーション
- Docker Infrastructureでの仕事:
- WordPress: 記事の作成・管理機能を提供するソフトウェア本体。
- PHP-FPM: PHPプログラムを実行するエンジン。Nginxからのリクエストを受け取り、PHPコードを動かしてHTMLを生成し、Nginxに返します。
- 重要: Webサーバー機能(Apache/Nginx)を含んでいないため、単体ではブラウザからアクセスできません。必ずNginxとセットで動かします。
MariaDB
- 役割: RDBMS (リレーショナルデータベース)
- Docker Infrastructureでの仕事:
- WordPressの記事データ、ユーザー情報、設定などを保存します。
- 特徴: MySQLから派生したオープンソースのデータベース。高い互換性を持ちます。
2. 永続的なデータベースとは (Persistent Database)
問題の所在
Dockerコンテナは「使い捨て」が基本です。コンテナを削除(docker rm)すると、コンテナ内部に書き込んだデータはすべて消えます。 データベースにとって「データが消える」=「サービス終了」を意味します。
解決策: Docker Volume
「データの実体」をコンテナの外(ホストOS)に置く 仕組みです。
- コンテナ:
/var/lib/mysql(DBのデータ保存場所) - ホストOS:
/home/user/data/mariadb - マウント: この2つを「紐付け」ます。
これにより、「コンテナを爆破して作り直しても、ホストにあるデータファイルを再びマウントすれば、昨日の続きから再開できる」 ようになります。これが「永続化」です。
3. FAQ: Nginxの設定と /etc/hosts の関係
Q. Nginxでドメイン名 (server_name) を設定すれば、/etc/hosts は不要では?
いいえ、絶対に必要です。役割が全く異なります。
1. 名前解決 (DNS / hosts) の役割
「ブラウザがサーバーに辿り着くまで」 の仕事です。 ブラウザは https://local.dev にアクセスする時、まず「この名前はどのIPアドレス?」と調べます。
- 通常: DNSサーバーに聞く。
- Docker Infrastructure:
/etc/hostsに127.0.0.1と書いてあるので、自分のPC (localhost) に向かいます。 この設定がないと、ブラウザはインターネット上の(存在しない)サーバーを探しに行ってしまい、Nginxまで到達しません。
2. Nginx (server_name) の役割
「サーバーに届いた後、どのサイトを表示するか」 の仕事です。 Nginxはリクエストを受け取ると、「どのドメイン名宛てに来たやつかな?」と確認します。
server_name local.dev;のブロックがあれば、その設定(WordPressなど)を使います。- もしマッチしなければ、デフォルトのサイトを表示したり、エラーを返したりします。
クラスでの例え
/etc/hosts: 「住所録」 (山田さんの家はここですよ、と教える)Nginx: 「表札」 (山田です、郵便物受け取りますよ、と確認する)
住所録に行き方(IP)が書いてなければ、郵便屋(ブラウザ)は家に辿り着けません。表札だけ立派でも意味がないのです。