このページで解説している内容は、以下の 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コマースプラットフォームなど、さまざまな用途で広く利用されており、その柔軟性と信頼性から、多くの開発者や組織に信頼されています。

URL:https://www.mysql.com/jp/

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コンテナ化されるサービスを定義するセクション。
mysqlMySQLサービスの定義。
image使用するDockerイメージを指定。
container_nameコンテナの名前を指定。
environment環境変数を設定するセクション。
MYSQL_ROOT_PASSWORDMySQLのルートユーザーのパスワードを指定。
MYSQL_DATABASEMySQLに作成されるデータベースの名前を指定。
MYSQL_USERMySQLに作成されるデータベースユーザーの名前を指定。
MYSQL_PASSWORDMySQLに作成されるデータベースユーザーのパスワードを指定。
volumesボリュームの定義。
db-dataMySQLコンテナ内のデータを永続化するためのボリュームを指定。
mysqlコンテナ
項目説明
phpmyadminphpMyAdminサービスの定義。
image使用するDockerイメージを指定。
container_nameコンテナの名前を指定。
depends_on依存関係を指定。指定されたサービスが起動してからこのサービスが開始される。
environment環境変数を設定するセクション。
PMA_HOSTphpMyAdminが接続するデータベースのホストを指定。
PMA_USERphpMyAdminが使用するデータベースのユーザー名を指定。
PMA_PASSWORDphpMyAdminが使用するデータベースのパスワードを指定。
portsポートのマッピングを指定。
volumesボリュームの定義。
phpmyadmin-dataphpMyAdminコンテナ内のセッションデータを永続化するためのボリュームを指定。
phpmyadminコンテナ
volumesボリュームの定義セクション。
db-dataMySQLコンテナ内のデータを永続化するためのボリュームを定義。
phpmyadmin-dataphpMyAdminコンテナ内のセッションデータを永続化するためのボリュームを定義。
volumes

 この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