ウェブサイト検索

Docker Compose を使用して phpMyAdmin をインストールする方法


Docker を使用して phpMyAdmin を簡単に起動して実行できます。このガイドでは、迅速でスムーズなセットアップに必要なすべての要素を説明しています。

20 年以上にわたり、phpMyAdmin は MySQL および MariaDB データベースを管理するための頼りになるソリューションでした。

これは PHP で書かれた無料のオープンソース ツールで、ユーザーはデータベースの作成、変更、削除などのさまざまなデータベース アクティビティを処理できます。テーブル、フィールド、インデックスの管理。 SQL ステートメントの実行。便利な Web ベースのインターフェイスを介してユーザーと権限を管理します。

ただし、これをインストールするには、PHP がインストールされており、NGINX、Apache、またはその他の Web サーバーで php-fpm サポートが構成されている必要があります。幸いなことに、Docker はこのプロセスを簡素化し、数分以内に phpMyAdmin を迅速にセットアップできるようにします。これにより、初期セットアップで行き詰ることなく、すぐに MySQL/MariaDB データベースの管理に集中できるようになります。

このガイドでは、Docker Compose を使用して phpMyAdmin コンテナをセットアップする手順を説明し、MySQL/MariaDB データベースに適切に接続するためのあらゆるシナリオを説明します。それでは、始めましょう!

前提条件

インストールを続行する前に、システムに Docker がインストールされていることを確認してください。しかし、それを持っていないとしても、心配する必要はありません。次のガイドはいずれも、すぐに理解するのに役立ちます。次のリンクのいずれかで使用しているディストリビューションを選択します: Ubuntu 24.04、Debian 12、Arch、Alma/Rocky、Fedora、Linux Mint 22、Pop!_OS 22.04、または Raspberry Pi OS。

もう 1 つの重要なコンポーネントは Docker Compose です。最近の Docker バージョンには、「docker-compose-plugin 」パッケージをインストールすることで Docker Compose が含まれるようになりました。したがって、まだセットアップに含まれていない場合はインストールしてください。

ただし、必要に応じて、以下の両方のコマンドを使用して個別に取得できます。その場合、ツールを実行するときに、「docker compose」ではなく「docker-compose」と入力することに注意してください。 」

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

phpMyAdmin と MySQL コンテナを一緒に実行する

これは、データベースを管理するために MySQL が付属の phpMyAdmin コンテナで開始される場合の最も一般的なシナリオです。これを実現するには、最初のステップとして、Docker Compose デプロイメント ファイルを配置するプロジェクト ディレクトリを作成します。

次に、それに切り替えます。ここからは、このガイドのさらに下にあるすべてのコマンドをその場所から実行する必要があります。

mkdir phpmyadmin
cd phpmyadmin

docker-compose.yml」という名前のファイルを作成します。このファイルは、phpMyAdmin および MySQL インスタンスのサービスとボリュームを定義し、Docker に何をすべきか、そしてデプロイメントをどのように設定するかを指示します。

お気に入りのテキスト エディタを開いて、次のコンテンツを貼り付けます。

nano docker-compose.yaml
services:
  phpmyadmin:
    image: phpmyadmin:latest
    container_name: phpmyadmin
    ports:
      - 8080:80
    environment:
      - PMA_ARBITRARY=0
      - PMA_HOST=db
    restart: unless-stopped
    depends_on:
      - db
  db:
    image: mysql:latest
    container_name: mysql
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: mypassword
    restart: unless-stopped
    volumes:
      - dbdata:/var/lib/mysql

volumes:
  dbdata:

ご覧のとおり、展開は簡単です。これには、MySQL サーバー用と phpMyAdmin アプリケーション自体用の 2 つのコンテナーの実行が含まれます。キー設定を見てみましょう。

PMA_ARBITRARY」を 0 に設定すると、phpMyAdmin ログイン画面でカスタム ホストを入力するオプションが削除されます。これは、phpMyAdmin コンテナの接続先として、事前定義された特定の「db」を使用するためです。

phpmyadmin」サービス部分で最も重要なものは「PMA_HOST」です。 phpMyAdmin が接続する MySQL サーバーのホスト名を指定します。

ただし、この設定では、MySQL が同じ Docker デプロイメント内の別のコンテナとして実行されているため、「db」に設定したサービス名を参照して MySQL に接続します。

MySQL サーバーをデプロイする「db」サーバー部分で、必ず「MYSQL_ROOT_PASSWORD」オプションの値を安全なものに変更してください。もちろん、名前付きの Docker ボリュームを作成することで、MySQL データの永続性も確保します。

準備は完了です!次のコマンドを入力してコンテナを起動し、バックグラウンドで実行します。

docker compose up -d

Docker イメージのダウンロードが開始されます。以下のような画面が表示され、phpMyAdmin/MySQL インストールが正常にデプロイされ、コンテナが起動して実行中であることが通知されます。

次に、ブラウザを開いて「http://localhost:8080」または「http://:8080」に移動します。 phpMyAdmin ログイン ページが表示されるはずです。

ログインするには、Docker Compose ファイルで「MYSQL_ROOT_PASSWORD」オプションの値として定義されているユーザー名「root」とパスワードを使用します。それでおしまい! phpMyAdminMySQL インスタンスに接続し、サービスを提供できるようになります。

ただし、ニーズに応じて、遭遇する可能性のある他の phpMyAdmin の使用例を見てみましょう。

ホストにインストールされている MySQLphpMyAdmin を接続します

しかし、MySQL/MariaDB サーバーがホストに直接インストールされており、Docker コンテナとしてデプロイされていない場合はどうなるでしょうか?この場合、phpMyAdmin コンテナは、ホストのネットワークから分離された別の Docker ネットワーク上にあるため、コンテナを直接見ることはできません。

したがって、phpMyAdmin をローカルにインストールされた MySQL に接続するには、phpMyAdmin 側と MySQL 側の両方で追加の構成を行う必要があります。最終的な phpMyAdmin の「docker-compose.yml」ファイルは次のようになります。

services:
  phpmyadmin:
    image: phpmyadmin:latest
    container_name: phpmyadmin
    ports:
      - 8080:80
    extra_hosts:
      - "host.docker.internal:host-gateway"
    environment:
      - PMA_ARBITRARY=0
      - PMA_HOST=host.docker.internal
    restart: unless-stopped

ここで重要な部分は「host.docker.internal:host-gateway」オプションです。これは、Docker によって認識される特別な DNS 名です。これは、ホスト マシンにルーティングする IP アドレスに解決されるため、ホスト上で実行されているサービスにアクセスするためにコンテナーが必要な場合に特に役立ちます。詳細については、こちらをご覧ください。

さらに、「PMA_HOST」オプションには、この Docker 固有の DNS 名「host.docker.internal」を指定します。

MySQL 側で、「バインドアドレス」オプションが「127.0.0.1」ではなく「0.0.0.0」に設定されていることを確認します。 MySQL 構成ファイル内。これにより、MySQL は任意の IP アドレスからの接続を受け入れることができます。

変更を加えたら、必ず MySQL サーバーを再起動して変更を有効にしてください。以下のコマンドを実行して、すべてが正しく設定されていることを確認できます。出力をチェックして、MySQL 行が「0.0.0.0」になっているかどうかを確認します。

netstat -tulnp

次に、コマンド「docker-compose up -d」を使用して phpMyAdmin コンテナを起動し、MySQL サーバーの root アカウントを使用してログインします。

正常に接続するには、root ユーザーまたは phpMyAdmin 経由で MySQL サーバーへの接続に使用している他のユーザーのリモート接続権限が有効になっていることを確認してください。 MySQL ユーザーの管理方法の詳細については、このテーマに関するガイドを参照してください。

重要な注意: 上記の設定により、インターネットまたは外部ネットワークから MySQL サーバーにアクセスできるようになります。これは一般的に安全ではなく、セキュリティ上の悪い慣行です。

不正なアクセスの試みから保護するには、特定のユーザーからの接続のみを許可するファイアウォールを設定することが重要です。内部ネットワークなどのネットワークをブロックし、その他すべてをブロックします。

phpMyAdmin を既存の MySQL コンテナに接続する

最後のシナリオは、MySQL/MariaDB コンテナがすでにデプロイされており、phpMyAdmin を追加して、便利なグラフィカル インターフェイスを通じてデータベースを管理したい場合です。これを実現するには、1 つの条件のみを満たす必要があります。それは、両方のコンテナが同じ Docker ネットワークを共有する必要があることです (相互に認識できるようにするため)。

したがって、最初に、2 つのコンテナが共有する Docker ネットワークを作成する必要があります。次のコマンドを実行すると、たとえば「mysql_network」という名前のネットワークを簡単に作成できます。

docker network create mysql_network

利用可能な Docker ネットワークのリストを表示するには、次のコマンドを実行します。

docker network ls

ここで、MySQL コンテナを停止し、サービス部分を追加してそのデプロイメントを変更します。

networks:
  - mysql_network

そして、その最後にネットワークを定義します。最終バージョンは次のようになります。

services:
  db:
    image: mysql:latest
    container_name: mysql
    volumes:
      - dbdata:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: mypassword
    ports:
      - 3306:3306
    restart: unless-stopped
    networks:
      - mysql_network

volumes:
  dbdata:

networks:
  mysql_network:
    name: mysql_network
    external: true

phpMyAdmin コンテナに対しても同じことを行い、もちろん、「PMA_HOST」オプションで MySQL サービス名を正しく指定していることを確認してください。

services:
  phpmyadmin:
    image: phpmyadmin:latest
    container_name: phpmyadmin
    ports:
      - 8080:80
    environment:
      - PMA_ARBITRARY=0
      - PMA_HOST=db
    restart: unless-stopped
    networks:
      - mysql_network

networks:
  mysql_network:
    name: mysql_network
    external: true

これで、両方のコンテナが同じネットワーク、つまり前に作成した「mysql_network」を共有するようになります。したがって、それらは相互に可視性を持ちます。

最後に、コンテナを実行すると、phpMyAdmin を通じて MySQL インスタンスにシームレスにログインする必要があります。

結論

phpMyAdmin を Docker と統合すると、MySQL/MariaDB データベースを管理するための合理化された効率的なアプローチが提供されます。

Docker コンテナで MySQL と一緒に phpMyAdmin をデプロイする場合でも、ホスト上の MySQL サーバーに接続する場合でも、既存の MySQL コンテナと統合する場合でも、私たちのガイドはそれを実現するために必要なすべての答えを提供します。

これにより、貴重な時間が節約され、構成エラーの可能性が減り、セットアップの複雑さよりもデータベース管理に集中できるようになります。

デプロイメントの作成時に使用できるオプションの詳細については、Docker Hub の phpMyAdmin および MySQL のドキュメントを確認してください。

お時間をいただきありがとうございました!ご質問がある場合は、以下のコメント欄に残してください。

関連記事: