このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Docker入門】phpMyAdminとMariaDBコンテナ

 ここでは、Docker Composeコマンドを使ったphpMyAdminとMariaDBコンテナの構築例を紹介します。

phpMyAdminとは

まず、はじめに phpMyAdminについて説明しておきます。

 phpMyAdminは、ウェブベースのMySQLデータベース管理ツールであり、PHPで書かれています。このツールを使用することで、ユーザーはブラウザを介してMySQLデータベースを直感的に管理することができます。MariaDBも操作することができます。

 MariaDB単体での操作では、通常はコマンドラインインターフェース(CLI)を使用してデータベースの管理を行います。CLIを使用することで、テキストベースドのコマンドを使ってデータベースやテーブルの作成、クエリの実行、ユーザーアカウントの管理などを行います。これにより、データベース管理者やシステム管理者は、ターミナルやコマンドプロンプトを介して直接データベースを操作することができます。ただし、CLIを使用する場合は、コマンドの構文を正確に覚えておく必要があります。

 一方、phpMyAdminを使用すると、ウェブブラウザを介してGUI(グラフィカルユーザーインターフェース)を通じてデータベースを操作することができます。これにより、ユーザーは直感的なインターフェースを通じてデータベースの操作を行うことができます。テーブルの作成、データの表示、クエリの実行、ユーザーアカウントの管理などの機能が、マウスクリックやドラッグ&ドロップなどの操作で容易に行えます。phpMyAdminは、非常に使いやすいツールであり、特に技術的な知識がないユーザーにとっては便利です。

URL:https://www.phpmyadmin.net/

MariaDBとは

 MariaDBは、オープンソースのリレーショナルデータベース管理システムであり、MySQLのフォークから派生しています。MySQLの元々の開発者がMySQLのオープンソースコミュニティとの不和から派生させたものです。MariaDBはMySQLと互換性があり、MySQLからの移行が比較的容易です。

 MariaDBは高いパフォーマンスと安定性を提供し、大規模なウェブアプリケーションや企業のデータベースシステムで広く利用されています。また、拡張性やセキュリティにも焦点を当てており、クラスタリングやレプリケーションなどの高度な機能を提供しています。MariaDBのコミュニティやエコシステムも活発であり、さまざまなプラグインやツールが利用可能です。

URL:https://mariadb.org/

phpMyAdminとMariaDBコンテナの構成

以下のようにphpMyAdminとMariaDBコンテナを構成します。

 MariaDBのデータは「db-data」という永続的なボリュームに保存し、phpMyAdminのセッションデータは「phpmyadmin-data」という永続的なボリュームに保存する構成です。

phpMyAdminとMariaDBコンテナの作成

「compose.yaml」を作成して、phpMyAdminとMariaDBコンテナを作成します。

不要な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」ファイルを保存する「phpadmaria」ディレクトリを作成して、作成したディレクトリに移動します。次のコマンドを実行します。

  • 「mkdir phpadmaria」コマンド
  • 「cd phpadmaria」コマンド
PS C:\Users\joeac\Desktop\docker> mkdir phpadmaria

    Directory: C:\Users\joeac\Desktop\docker

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2024/04/16     0:23                phpadmaria

PS C:\Users\joeac\Desktop\docker> cd phpadmaria
PS C:\Users\joeac\Desktop\docker\phpadmaria>

VSCodeの起動

VSCodeで「compose.yaml」ファイルを作成します。

・「code compose.yaml」コマンドを実行します。

PS C:\Users\joeac\Desktop\docker\phpadmaria> code compose.yaml

VSCodeが起動します。

「compose.yaml」ファイルの編集

・「compose.yaml」ファイルを以下のように編集して保存します。

services:
  mariadb:
    image: mariadb:10.8
    container_name: mariadb_container
    environment:
      MARIADB_ROOT_PASSWORD: root-pass
      MARIADB_DATABASE: test-db
      MARIADB_USER: test-user
      MARIADB_PASSWORD: test-pass
    volumes:
      - db-data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin:5.2
    container_name: phpmyadmin_container
    depends_on:
      - mariadb
    environment:
      PMA_HOST: mariadb
      PMA_USER: test-user
      PMA_PASSWORD: test-pass
    ports:
      - "80:80"
    volumes:
    - phpmyadmin-data:/sessions

volumes:
  db-data:
  phpmyadmin-data:

定義内容の解説

「compose.yaml」ファイルの定義を解説します。

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

 この compose.yamlファイルでは、MariaDBとphpMyAdminの2つのサービスを定義しています。MariaDBサービスはMariaDBデータベースを提供し、phpMyAdminサービスはWebベースの管理ツールとして動作します。また、MariaDBのデータは「db-data」という永続的なボリュームに保存され、phpMyAdminのセッションデータは「phpmyadmin-data」という永続的なボリュームに保存されます。

コンテナの作成と実行

「docker compose up -d」コマンドを実行します。

このコマンドは、「compose.yaml」ファイルを配置した場所で実行する必要があります。

C:\Users\joeac\Desktop\docker\nginx1> docker compose up -d
[+] Running 8/8
 ✔ nginx 7 layers [⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled             6.4s
   ✔ 13808c22b207 Already exists                               0.0s
   ✔ 6fcdffcd79f0 Pull complete                                2.0s
   ✔ fbf231d461b3 Pull complete                                0.7s
   ✔ c9590dd9c988 Pull complete                                0.9s
   ✔ b4033143d859 Pull complete                                1.6s
   ✔ abaefc5fcbde Pull complete                                1.6s
   ✔ bcef83155b8b Pull complete                                2.3s
[+] Running 1/2
 - Network nginx1_default     Crea...                          0.5s
 ✔ Container nginx_container  S...                             0.5s

phpMyAdminコンテナへの接続

・Webブラウザを起動して、URLに「localhost」と入力します。

phpMyAdminのページが表示されます。

ここでは、MariaDBの操作は行いませんが、GUIでデータベースの操作ができます。

・「docker container ls」コマンドを実行します。

各コンテナが使用しているポート番号などが確認できます。

PS C:\Users\joeac\Desktop\docker\phpadmaria> docker container ls
CONTAINER ID   IMAGE            COMMAND                   CREATED         STATUS         PORTS                NAMES
12fcdedbbfea   phpmyadmin:5.2   "/docker-entrypoint.…"   6 minutes ago   Up 6 minutes   0.0.0.0:80->80/tcp   phpmyadmin_container
4c07167bf15e   mariadb:10.8     "docker-entrypoint.s…"   6 minutes ago   Up 6 minutes   3306/tcp             mariadb_container