Skip to content

サービス構成と役割

Docker Infrastructureの3つの主要コンテナの役割と、重要な概念「永続化」について解説します。

1. 各サービスの役割

Nginx (Engine-X)

  • 役割: Webサーバー / リバースプロキシ
  • Docker Infrastructureでの仕事:
    1. HTTPS終端: クライアント(ブラウザ)からの暗号化通信を受け取り、復号します。
    2. 静的コンテンツ配信: 画像やCSSなどを返します。
    3. 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つを「紐付け」ます。

これにより、「コンテナを爆破して作り直しても、ホストにあるデータファイルを再びマウントすれば、昨日の続きから再開できる」 ようになります。これが「永続化」です。

参考: Use volumes | Docker Documentation

3. FAQ: Nginxの設定と /etc/hosts の関係

Q. Nginxでドメイン名 (server_name) を設定すれば、/etc/hosts は不要では?

いいえ、絶対に必要です。役割が全く異なります。

1. 名前解決 (DNS / hosts) の役割

「ブラウザがサーバーに辿り着くまで」 の仕事です。 ブラウザは https://local.dev にアクセスする時、まず「この名前はどのIPアドレス?」と調べます。

  • 通常: DNSサーバーに聞く。
  • Docker Infrastructure: /etc/hosts127.0.0.1 と書いてあるので、自分のPC (localhost) に向かいます。 この設定がないと、ブラウザはインターネット上の(存在しない)サーバーを探しに行ってしまい、Nginxまで到達しません。

2. Nginx (server_name) の役割

「サーバーに届いた後、どのサイトを表示するか」 の仕事です。 Nginxはリクエストを受け取ると、「どのドメイン名宛てに来たやつかな?」と確認します。

  • server_name local.dev; のブロックがあれば、その設定(WordPressなど)を使います。
  • もしマッチしなければ、デフォルトのサイトを表示したり、エラーを返したりします。

クラスでの例え

  • /etc/hosts: 「住所録」 (山田さんの家はここですよ、と教える)
  • Nginx: 「表札」 (山田です、郵便物受け取りますよ、と確認する)

住所録に行き方(IP)が書いてなければ、郵便屋(ブラウザ)は家に辿り着けません。表札だけ立派でも意味がないのです。

Released under the MIT License.