このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Docker入門】phpMyAdminとMySQLコンテナ
ここでは、Docker Composeコマンドを使ったphpMyAdminとMySQLコンテナの構築例を紹介します。
phpMyAdminとは
まず、はじめに phpMyAdminについて説明しておきます。
phpMyAdminは、ウェブベースのMySQLデータベース管理ツールであり、PHPで書かれています。このツールを使用することで、ユーザーはブラウザを介してMySQLデータベースを直感的に管理することができます。MariaDBも操作することができます。
URL:https://www.phpmyadmin.net/
MySQLとは
MySQLは、オープンソースのリレーショナルデータベース管理システム(RDBMS)であり、世界中の多くのウェブサイトやアプリケーションで使用されています。1995年にMichael WideniusとDavid Axmarkによって開発され、その後MySQL AB(現在はOracle Corporationが所有)によってサポートされています。
MySQLは、汎用性、信頼性、パフォーマンス、および拡張性に優れており、特にウェブ開発やアプリケーション開発に適しています。MySQLは、クライアント/サーバーモデルに基づいており、クライアントがデータベースサーバーに接続してデータの操作を行います。
MySQLは、Webアプリケーション、CMS(コンテンツ管理システム)、eコマースプラットフォームなど、さまざまな用途で広く利用されており、その柔軟性と信頼性から、多くの開発者や組織に信頼されています。
phpMyAdminとMySQLコンテナの構成
以下のようにphpMyAdminとMySQLコンテナを構成します。
MySQLのデータは「db-data」という永続的なボリュームに保存し、phpMyAdminのセッションデータは「phpmyadmin-data」という永続的なボリュームに保存する構成です。
phpMyAdminとMySQLコンテナの作成
「compose.yaml」を作成して、phpMyAdminとMySQLコンテナを作成します。
不要なDockerオブジェクトの削除
まず、不要なDockerオブジェクトをすべて削除しておきます。
以下のコマンドを実行します。
・「docker system prune -a」コマンドを実行します。
Are you sure you want to continue? [y/N] の質問には「y」と入力します。
PS C:\Users\joeac> docker system prune -a
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
(略)
・「docker system prune -a」コマンドで削除されなかったDockerオブジェクトは、個別に削除しておきます。
環境によって削除されずに残っているDockerオブジェクトは異なります。
compose.yaml の作成
ディレクトリの作成と移動
Docker Composeでコンテナを作成するには、「compose.yaml」ファイルが必要になります。
デフォルトでは、カレントディレクトリにある「compose.yaml」ファイルが読み込まれるため、作業ディレクトリに移動しておきます。
・「cd desktop/docker」コマンドを実行します。
PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker>
「compose.yaml」ファイルを保存する「phpadmysql」ディレクトリを作成して、作成したディレクトリに移動します。次のコマンドを実行します。
- 「mkdir phpadmysql」コマンド
- 「cd phpadmysql」コマンド
PS C:\Users\joeac\Desktop\docker> mkdir phpadmysql
Directory: C:\Users\joeac\Desktop\docker
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2024/04/16 23:56 phpadmysql
PS C:\Users\joeac\Desktop\docker> cd phpadmysql
PS C:\Users\joeac\Desktop\docker\phpadmysql>
VSCodeの起動
VSCodeで「compose.yaml」ファイルを作成します。
・「code compose.yaml」コマンドを実行します。
PS C:\Users\joeac\Desktop\docker\phpadmysql> code compose.yaml
VSCodeが起動します。
「compose.yaml」ファイルの編集
・「compose.yaml」ファイルを以下のように編集して保存します。
services:
mysql:
image: mysql:8.0
container_name: mysql_container
environment:
MYSQL_ROOT_PASSWORD: root-pass
MYSQL_DATABASE: test-db
MYSQL_USER: test-user
MYSQL_PASSWORD: test-pass
volumes:
- db-data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin:5.2
container_name: phpmyadmin_container
depends_on:
- mysql
environment:
PMA_HOST: mysql
PMA_USER: test-user
PMA_PASSWORD: test-pass
ports:
- "80:80"
volumes:
- phpmyadmin-data:/sessions
volumes:
db-data:
phpmyadmin-data:
定義内容の解説
「compose.yaml」ファイルの定義を解説します。
項目 | 説明 |
---|---|
services | コンテナ化されるサービスを定義するセクション。 |
mysql | MySQLサービスの定義。 |
image | 使用するDockerイメージを指定。 |
container_name | コンテナの名前を指定。 |
environment | 環境変数を設定するセクション。 |
MYSQL_ROOT_PASSWORD | MySQLのルートユーザーのパスワードを指定。 |
MYSQL_DATABASE | MySQLに作成されるデータベースの名前を指定。 |
MYSQL_USER | MySQLに作成されるデータベースユーザーの名前を指定。 |
MYSQL_PASSWORD | MySQLに作成されるデータベースユーザーのパスワードを指定。 |
volumes | ボリュームの定義。 |
db-data | MySQLコンテナ内のデータを永続化するためのボリュームを指定。 |
項目 | 説明 |
---|---|
phpmyadmin | phpMyAdminサービスの定義。 |
image | 使用するDockerイメージを指定。 |
container_name | コンテナの名前を指定。 |
depends_on | 依存関係を指定。指定されたサービスが起動してからこのサービスが開始される。 |
environment | 環境変数を設定するセクション。 |
PMA_HOST | phpMyAdminが接続するデータベースのホストを指定。 |
PMA_USER | phpMyAdminが使用するデータベースのユーザー名を指定。 |
PMA_PASSWORD | phpMyAdminが使用するデータベースのパスワードを指定。 |
ports | ポートのマッピングを指定。 |
volumes | ボリュームの定義。 |
phpmyadmin-data | phpMyAdminコンテナ内のセッションデータを永続化するためのボリュームを指定。 |
volumes | ボリュームの定義セクション。 |
db-data | MySQLコンテナ内のデータを永続化するためのボリュームを定義。 |
phpmyadmin-data | phpMyAdminコンテナ内のセッションデータを永続化するためのボリュームを定義。 |
このcompose.yamlファイルでは、MySQLとphpMyAdminの2つのサービスを定義しています。MySQLサービスはMySQLデータベースを提供し、phpMyAdminサービスはWebベースの管理ツールとして動作します。また、MySQLのデータは「db-data」という永続的なボリュームに保存され、phpMyAdminのセッションデータは「phpmyadmin-data」という永続的なボリュームに保存されます。
コンテナの作成と実行
「docker compose up -d」コマンドを実行します。
このコマンドは、「compose.yaml」ファイルを配置した場所で実行する必要があります。
PS C:\Users\joeac\Desktop\docker\phpadmysql> docker compose up -d
[+] Running 31/2
✔ phpmyadmin 18 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 15.7s
✔ mysql 11 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 12.7s
[+] Running 2/5
- Network phpadmysql_default Created 0.9s
- Volume "phpadmysql_phpmyadmin-data" Created 0.9s
- Volume "phpadmysql_db-data" Created 0.9s
✔ Container mysql_container Started 0.4s
✔ Container phpmyadmin_container Started 0.8s
PS C:\Users\joeac\Desktop\docker\phpadmysql>
phpMyAdminコンテナへの接続
・Webブラウザを起動して、URLに「localhost」と入力します。
phpMyAdminのページが表示されます。
上の赤枠からMySQLコンテナに接続していることが確認できます。
ここでは、MySQLデータベースの操作は行いませんが、GUIでデータベースの操作ができます。
・「docker container ls」コマンドを実行します。
各コンテナが使用しているポート番号などが確認できます。
PS C:\Users\joeac\Desktop\docker\phpadmysql> docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
893bb8e6726b phpmyadmin:5.2 "/docker-entrypoint.…" 13 minutes ago Up 13 minutes 0.0.0.0:80->80/tcp phpmyadmin_container
3f8335d9bf42 mysql:8.0 "docker-entrypoint.s…" 13 minutes ago Up 13 minutes 3306/tcp, 33060/tcp mysql_container