170
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

Organization

phpMyAdmin on docker が便利すぎる

Docker使ってWEBシステムを開発している場合、コンテナでMySQLサーバーを起動することが定石だと思います。
で、このDBの中身をGUI的に操作したい場合、3306ポートをEXPOSEしちゃう?

....そんな必要はありません!

DBをGUI的に操作するコンテナ、つまりphpMyAdminコンテナがあればいいんです!

phpMyAdminの公式Docker imageのページはこちら
https://hub.docker.com/r/phpmyadmin/phpmyadmin/

公式ならほぼ安心ですが、Docker imageには危険なexploitが埋め込まれていたりすることもあるので、Dockerfileも念のため確認しておきます。

やっぱalpineベースなんですね〜。万全を期すならばこのDockerfileを自前でビルドでしょう。
Dockerfileをダウンロードしてしかるべきところに格納し、docker build 、もしくはdocker-compose.ymlに追記してdocker-compose buildするだけなんでまったく面倒ではありません。
でも公式イメージなんで、pullするだけでも大丈夫ですね。:smile:

docker-compose.ymlにphpMyAdminの定義を追加する

ではさっそく使ってみましょう。
たとえば、docker-compose.ymlでMySQLをこんな風に定義している場合

docker-compose.yml

# その他のコンテナの定義
 .
 .
 .

# MySQLコンテナ
mysql:
  image: mysql:5.7
  volumes:
    - "./mysql:/var/lib/mysql"
  environment:
    - MYSQL_ROOT_PASSWORD=password

これに、ちょちょいとphpMyAdminのコンテナを追加

docker-compose.yml
mysql:
  image: mysql:5.7
  volumes:
    - "./mysql:/var/lib/mysql"
  environment:
    - MYSQL_ROOT_PASSWORD=password

phpmyadmin:
  image: phpmyadmin/phpmyadmin
  environment:
    - PMA_ARBITRARY=1
    - PMA_HOST=mysql
    - PMA_USER=root
    - PMA_PASSWORD=password
  links:
    - mysql
  ports:
     - 8080:80
  volumes:
     - /sessions

蛇足:一応公式の指示どおりにcompose.ymlを書きましたがこのままだとdata volumeの残骸が増え続ける可能性があるので、sessionsは明示的にホストのディレクトリに結びつけた方いいかもしれません。たとえば

  volumes:
     - "./phpmyadmin/sessions:/sessions"

とか。ここではこのままいきます。

composeでコンテナ起動

docker-compose up -d

ブラウザでhttp://localhost:8080にアクセス

php.png

無事localhostでphpMyAdminが表示されました!

なにが素晴らしいって思い立ってからここまで到達するのに10分も経っていないということ。
PCやMacにMySQLのクライアント入れるよりお手軽ではないでしょうか。Docker以降、WEBサービスを手元で動作させるハードルが劇的に下がっていると感じます。

Dockerって素晴らしいですね〜。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
170
Help us understand the problem. What are the problem?