前回の手順で作成した
・Dockerfile
・docker-compose.yml
の2ファイルの中身を振り返り
やっている事を整理する目的でメモを残します。
1. Dockerfile の中で実行していること
FROM php:8.2-apache
RUN apt-get update && docker-php-ext-install pdo pdo_mysql
| 行 | 内容 | 実際に行われている処理 |
|---|---|---|
| FROM php:8.2-apache | ベースイメージを指定 | Docker Hub の php:8.2-apache イメージを元に新しいイメージを作る。このベースには Apache Webサーバと PHP実行環境がすでに含まれている。 |
| RUN apt-get update && docker-php-ext-install pdo pdo_mysql | 必要なPHP拡張をインストール | apt-get update でパッケージ情報を更新。docker-php-ext-install pdo pdo_mysql により、PHPの「PDO」と「MySQL接続用ドライバ(pdo_mysql)」を有効化。これで PHP から MariaDB に接続できるようになる。 |
このDockerfileは「Apache+PHP(MySQL接続対応)」のWebサーバを自分専用にビルドする設計図。
つまり「php:8.2-apache を土台に、DB接続機能を追加したオリジナルWebサーバ」を作っている。
2. docker-compose.yml の中で実行していること
services:
web:
build: .
ports:
- "8080:80"
volumes:
- ./app:/var/www/html
depends_on:
- db
db:
image: mariadb:10.5
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: testdb
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
| セクション | キー | 内容 | 実際に行われている処理 |
|---|---|---|---|
| services: | — | サービス(コンテナ)の定義ブロック | この中で2つのコンテナ(webとdb)を定義。Composeがそれらを同時に起動・連携させる。 |
| web: | build: . | イメージをDockerfileからビルド | カレントディレクトリ(.)にあるDockerfileを使って、Webサーバ用のイメージを作る。 |
| ports: - "8080:80" | ポートの割り当て | ホスト側8080番をコンテナの80番(Apache)に接続。ブラウザからアクセス可能に。 | |
| volumes: - ./app:/var/www/html | ファイル共有 | ホストの./appフォルダをコンテナ内の/var/www/html(Apacheの公開ディレクトリ)にマウント。ソースコードを即時反映できる。 | |
| depends_on: - db | 起動順序制御 | db(MariaDB)コンテナが先に起動してからwebを起動。DBが利用可能な状態でPHPが立ち上がる。 | |
| db: | image: mariadb:10.5 | MariaDBの公式イメージを使用 | Docker Hubから MariaDB 10.5 を取得して起動。 |
| environment: | 環境変数設定 | MYSQL_ROOT_PASSWORD でrootパスワードを設定。MYSQL_DATABASE で初期DB名を作成。 | |
| volumes: - db_data:/var/lib/mysql | 永続ボリューム | DBのデータをdb_dataというボリュームに保存。コンテナを消してもDBデータは保持される。 | |
| volumes: | db_data: | ボリューム定義 | 名前付きボリュームを作成。Composeが自動的に管理。 |
■動作の流れ(イメージ生成〜起動まで)
-
docker compose build
├── Dockerfileを使ってphp+apache+pdomysql入りのWebイメージを作成
└── mariadb:10.5 イメージを取得 -
docker compose up -d
├── dbコンテナを起動(MariaDB)
├── webコンテナを起動(Apache+PHP)
└── 両者を同じネットワークに接続 -
ブラウザアクセス
└── EC2のポート8080 → Webコンテナの80番 → index.php実行 → MariaDBへ接続
■まとめ
| ファイル | 役割 | 処理概要 |
|---|---|---|
| Dockerfile | イメージ設計図 | Apache+PHP環境をビルドし、DB接続機能を追加する |
| docker-compose.yml | 複数コンテナの連携設定 | WebコンテナとDBコンテナを同時に起動し、連携構成を自動構築する |