MySQL道普請便り

第125回 phpMyAdminでDockerで建てたMySQLにアクセスする

この記事を読むのに必要な時間:およそ 2 分

本連載でも何回かMySQLをDockerで扱う方法に関して簡単に説明してきました。これまでの方法としては,Dockerで建てたMySQLに対して直接コンテナ内部に入り,コマンドラインクライアントでアクセスを行っていました。この方法だと,MySQLは触りたいけど,せっかくDockerを使っているのにコンテナ内部に入るのはちょっと…と思われた方もいるかも知れません。

そこで今回は,phpMyAdminというPHPで作られたMySQL管理用のWebコンソールを立ち上げて利用する方法を紹介します。docker-composeを使用してphpMyAdminとMySQLを一緒に使うことで,コンテナ内に直接入らなくても簡単にDockerで建てたMySQLにアクセスできます。

検証環境

今回は,Mac上でDocker for Macを利用して検証を行いました。また,MySQLのDockerイメージは8.0.20で確認を行います。phpMyAdminのバージョンは最新の5.0.2になっています。

検証のデータには,第2回 MySQLにはじめてのデータを入れてみるで紹介されたKEN_ALL.CSVを利用しております。

注意

今回はローカルでの開発環境でという想定で,phpMyAdminを利用してMySQLに接続する方法を紹介しましたが,いきなりMySQLへのログインができてしまうページが表示される方法についても解説します。もしインターネット上で公開しているサービス,開発環境で利用する場合には,何らかの認証を通して使う,使っていない時はアクセスができないようにする等の対応を取りましょう。特に認証系をスキップしている場合は,それらがどういった事態につながってしまうかを理解してから使用しましょう。

phpMyAdminとは?

phpMyAdminはPHPで書かれたフリーソフトウェアのひちつで,WebからアクセスするMySQLの管理コンソールです。phpMyAdminはMySQLとMariaDBをサポートしており,よく使うデータベースの操作が行えるようなインターフェースを提供してくれるツールになります。公式ページはこちらになります。

Docker上でphpMyAdminとMySQLを接続する

それではDocker上でphpMyAdminとMySQLを接続してみましょう。今回もdocker-composeを利用して接続を行っていきます。第106回 Docker Composeを使って便利にMySQLを利用してみる第122回 DockerでMySQLをもっと便利に活用してみるで紹介したDockerfileを利用して,以下のようなDockerfileとdocker-compose.ymlを作成します。

ファイル構成は以下のとおりです。これから順に以下のファイルに関して説明を行っていきます。

$ tree .
.
├── Dockerfile
├── docker-compose.yml
└── docker-entrypoint-initdb.d
    ├── 1_ddl.sql
    ├── 2_load_data_infile.sql
    └── KEN_ALL_UTF8.CSV

Dockerfileは以下のように第122回のものを使用しています。

FROM mysql:latest

RUN apt-get update
RUN apt-get -y install locales-all

ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8

docker-compose.ymlは以下のようになります。

version: '3'
services:
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    environment:
      PMA_HOST: 'mysql'
    ports:
    - '127.0.0.1:8080:80'
  mysql:
    build: .
    volumes:
      - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
    environment:
      MYSQL_ROOT_PASSWORD: password
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --secure-file-priv="/docker-entrypoint-initdb.d"

phpMyAdmin側で設定をしている環境変数PMA_HOSTは,MySQLの接続先のホストを入力します。今回はすぐ下に定義されているmysqlサービスにアクセスを行う予定のため,mysqlと設定しています。portsは他の人からアクセスができないように,ローカルのport8080からのみアクセスを受け付けるように設定してあります。

docker-entrypoint-initdb.dの中身に関しては第122回で解説を行っているため,ここでは解説を割愛します。

これを動かすにはdocker-compose buildでbuildを行い,その後にdocker-compose upなどで起動することができます。

今回は,このdocker-compose.ymlで定義したmysqlに対してアクセスができる,phpMyAdminの設定を追加してみましょう。

設定を追加して,docker-compose up -dを行います。localhost:8080へブラウザでアクセスをすると,以下のようにphpMyAdminのログイン画面が表示されます。

ログイン画面

ログイン画面

ここでdocker-compose.yml内で設定したMySQLのパスワードを入力するとログインでき,MySQLを操作することができます。

今回はrootユーザのパスワードとしてpasswordを指定しているため,rootとpasswordの組み合わせでログインができます。

ログインすると,以下のような画面が表示されて操作することができます。

ログイン直後の画面

ログイン直後の画面

認証を自動化する

phpMyAdminにはMySQLのパスワードを事前に設定しておくことで,MySQLのパスワード入力を省略することもできます。以下のようにdocker-compose.ymlの書き換えを行います。

version: '3'
services:
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    environment:
      PMA_HOST: 'mysql'
      PMA_USER: 'root'
      PMA_PASSWORD: 'password'
    ports:
    - '127.0.0.1:8080:80'
  mysql:
    build: .
    volumes:
      - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
    environment:
      MYSQL_ROOT_PASSWORD: password
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --secure-file-priv="/docker-entrypoint-initdb.d"

追加したのはPMA_USERというユーザ名を指定する環境変数と,PMA_PASSWORDというパスワードを指定する環境変数です。

以上のようにdocker-composeへの変更を行ってctrl-cをしてから,再度docker-compose upで起動してみましょう。今度は認証ページが表示されること無くログイン後の画面が表示されるはずです。

今回紹介した環境変数以外にも,Docker Hubにある公式のページで紹介されているので,ぜひ一度覗いてみてはいかがでしょうか。

まとめ

今回は,phpMyAdminというPHPで作成されたMySQLの管理ツールについて紹介させていただきました。これを使うとDockerコンテナの中に入らなくてもDockerで建てたMySQLにアクセスができるようになります。phpMyAdminはGUIベースで簡単に使用を始めることができるので,皆さんもぜひ一度使われてはいかがでしょうか?

著者プロフィール

木村浩一郎(きむらこういちろう)

株式会社オプティム 技術統括本部のエンジニア。最近はミドルウェア・インフラ周りのことも少しずつ学習しています。趣味は将棋。好きな戦法は四間飛車。

Twitter:@kk2170