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するだけでも大丈夫ですね。
docker-compose.ymlにphpMyAdminの定義を追加する
ではさっそく使ってみましょう。
たとえば、docker-compose.ymlでMySQLをこんな風に定義している場合
# その他のコンテナの定義
.
.
.
# MySQLコンテナ
mysql:
image: mysql:5.7
volumes:
- "./mysql:/var/lib/mysql"
environment:
- MYSQL_ROOT_PASSWORD=password
これに、ちょちょいとphpMyAdminのコンテナを追加
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
にアクセス
無事localhostでphpMyAdminが表示されました!
なにが素晴らしいって思い立ってからここまで到達するのに10分も経っていないということ。
PCやMacにMySQLのクライアント入れるよりお手軽ではないでしょうか。Docker以降、WEBサービスを手元で動作させるハードルが劇的に下がっていると感じます。
Dockerって素晴らしいですね〜。