例
今回は、例としてメール管理システムのコンテナを作成する。
今まではXAMPPを使用し、VSCodeのワークスペース内で以下のディレクトリ構成で開発していました。
VSCodeワークスペース(従来のやり方:xamppの場合)
C:Users\user\xampp/
└ email_mangement_system/
| └index.php
└ xxxxxx/
上記をdockerでは、以下のディレクトリ構成とする。
言語ごとに分けたかったので以下の構造になっています。
今回使用するのは、email_management_systemのみです。
VSCodeワークスペース(今後のやり方:dockerの場合)
C:Users\user\docker/
└ php/
| └ email_mangement_system/
| | └ index.php
| └ xxxxxx/
└ html/
└ c/
| └ c++/
| └ c#/
└ typescript/
└ java/
└ python/
1.必要なフォルダを作成
1.dockerフォルダの作成
エクスプローラーを開き、以下の順でC:\Users\Userを開く。
[PC]をクリック。
↓
[ローカルディスク(C:)]をクリック。
↓
[ユーザー名(※デフォルトならユーザー)]をクリック。
↓
[User]をクリック。
↓
ここ(User)で、右クリック。
↓
[新規作成]をクリック。
↓
[フォルダー]をクリック。
↓
名前をdockerにする。
ここから下は、今やってきた基本的なフォルダの作り方をコマンドにてやっていく。
PowerShellを起動し、以下のコマンドを入力する。
2.ディレクトリ移動
↓C:\Users\Userに移動。
cd C:\Users\User
3.ディレクトリ構造を作成
↓Userディレクトリに移動。
mkdir docker\php\email_management_system
↓C:\Users\User\docker\php\email_management_systemに移動。
cd docker\php\email_management_system
4.必要なディレクトリを作成
↓email_management_systemフォルダにsrcフォルダを作成。
mkdir src
↓email_management_systemフォルダにmysql_dataフォルダを作成。
mkdir mysql_data
5.docker-compose.ymlファイルの作成
↓docker-compose.ymlを作成と同時にメモ帳を起動。
notepad docker-compose.yml
以下の内容を貼り付ける。
version: '3.8'
services:
# Apache + PHP サービス
web:
image: php:8.2-apache
container_name: email_management_system_web
ports:
- "8001:80"
volumes:
- ./src:/var/www/html
depends_on:
- db
environment:
- APACHE_DOCUMENT_ROOT=/var/www/html
networks:
- email_network
# MySQL データベース
db:
image: mysql:8.0
container_name: email_management_system_db
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: email_management
MYSQL_USER: email_user
MYSQL_PASSWORD: email_password
ports:
- "3307:3306"
volumes:
- ./mysql_data:/var/lib/mysql
networks:
- email_network
# phpMyAdmin
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: email_management_system_phpmyadmin
environment:
PMA_HOST: db
PMA_PORT: 3306
PMA_USER: root
PMA_PASSWORD: rootpassword
ports:
- "8002:80"
depends_on:
- db
networks:
- email_network
networks:
email_network:
driver: bridge
volumes:
mysql_data:
[Ctrl]+[S]で保存。
6.簡単なPHPファイルを作成
↓srcフォルダに移動。
cd src
↓index.phpを作成。
notepad index.php
以下の内容を貼り付ける。
<?php
echo "<h1>Email Management System</h1>";
echo "<p>Apache + PHP + MySQL environment is working!</p>";
echo "<p>PHP Version: " . phpversion() . "</p>";
echo "<p>Current Time: " . date('Y-m-d H:i:s') . "</p>";
// データベース接続テスト
try {
$pdo = new PDO('mysql:host=db;dbname=email_management', 'email_user', 'email_password');
echo "<p style='color: green;'>✓ Database connection successful!</p>";
} catch(PDOException $e) {
echo "<p style='color: red;'>✗ Database connection failed: " . $e->getMessage() . "</p>";
}
?>
2.コンテナの作成と起動
↓email_managementディレクトリに戻る。
cd ..
↓Dockerイメージをダウンロードしてコンテナを起動。
docker-compose up -d
3.動作確認
↓コンテナの状態確認。
docker-compose ps
↓ログ確認。
docker-compose logs
↓Webサイトにアクセスする場合
http://localhost:8001
↓phpMyadminにアクセスする場合
http://localhost:8002
4.便利なコマンド
– コンテナを停止
docker-compose stop
– コンテナを起動
docker-compose start
– コンテナを削除(データも削除)
docker-compose down
– ログをリアルタイム表示
docker-compose logs -f
他のdockerコマンドはこちら
5.最終的なディレクトリ構造
C:\Users\User\docker\php\email_management_system\
├── docker-compose.yml
├── src\
│ └── index.php
└── mysql_data\ (自動作成)
6.docker-compose.ymlの役割
1.複数コンテナの管理設定ファイル
- 複数のDockerコンテナをまとめて管理するための設定ファイル。
- 1つのコマンドで複数のサービス(コンテナ)を同時に起動・停止できる。
2.サービス構成の定義
email_managementの例では以下の3つのサービスを定義している。
services:
web: # Apache + PHPコンテナ
db: # MySQLコンテナ
phpmyadmin: # phpMyAdminコンテナ
3.各サービスの詳細設定
例として、webサービス(Apache + PHP)の設定
web:
image: php:8.2-apache # 使用するDockerイメージ
container_name: email_management_system_web # コンテナ名
ports:
- "8001:80" # ポート転送(ホスト:コンテナ)
volumes:
- ./src:/var/www/html # ファイル共有(ホスト:コンテナ)
4.主な設定項目
| 項目 | 役割 | 例 |
|---|---|---|
image | 使用するDockerイメージ | php:8.2-apache |
ports | ポート転送設定 | "8001:80" |
volumes | ホストとコンテナ間のファイル共有 | ./src:/var/www/html |
environment | 環境変数設定 | データベースパスワードなど |
depends_on | サービス間の依存関係 | webがdbに依存 |
networks | ネットワーク設定 | コンテナ間通信 |
5.ネットワーク設定
networks:
email_network: # カスタムネットワーク作成
driver: bridge
- コンテナ同士が通信できるネットワークを作成。
webコンテナからdbコンテナにアクセス可能。
6.Docker Composeの利点
↓従来の方法(個別実行)
docker run -d --name web php:8.2-apache
docker run -d --name db mysql:8.0
docker run -d --name phpmyadmin phpmyadmin/phpmyadmin
# ネットワーク、ボリューム設定も個別に...
↓Docker Composeを使用
docker-compose up -d # 全サービス一括起動
7.実際の動作
docker-compose up -d
↑を実行すると、以下が動作する。
- ネットワーク
email_networkを作成 - MySQLコンテナを起動
- Apache+PHPコンテナを起動(MySQLを待つ)
- phpMyAdminコンテナを起動
- 全てのコンテナが連携して動作開始


コメント