はじめに
MySQLサーバが動いていて、ちょっとphpMyAdminで繋ぎたかったです。
具体的にはRDSでMySQLが稼働中で、phpMyAdminのアドバイザー(チューニングのアドバイスを行ってくれる機能)を使いたかったのですが、通常phpMyAdminを入れるにはPHPが動くWebサーバを建てる必要があります。
EC2などでインスタンスを立てたりする必要があるのですが、閉じ忘れだったり、不用意にアクセスされたりするためお手軽に使えないか、と思いました。
結論からするととても簡単でした。
コンテナ単独
phpMyAdmin公式のDockerイメージを起動するだけでOKです。
起動時に接続先ホストを与えるのでそちらを事前に用意しておきます。
$ export PMA_HOST=mysql.example.com
$ docker run --name myadmin -d -e PMA_HOST=mysql.example.com -p 8080:80 phpmyadmin
起動が完了したら http://localhost:8080 にアクセスするとphpMyAdminが開きます。後は通常の認証でOKです。(ただし外部からの接続が許可されたユーザーのみです)
終了はDockerコンテナを落とせばOKです。
$ docker down myadmin && docker kill myadmin
docker-compose
docker-compose.yml
version: '3'
services:
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOST=docker.for.mac.host.internal
- PMA_PORT=3306
# - PMA_USER=
# - PMA_PASSWORD=
ports:
- "3000:80"
# セション永続化
volumes:
- ./docker/phpmyadmin/sessions:/sessions
SSHトンネル
対象のMySQLサーバが外部から接続できない場合、SSHでトンネルを張ると良いです。
例えばローカルホストのIP接続のみ( 127.0.0.1
)を許可している場合、下記のようにするとトンネルを張ることができます。
ssh -L 3306:127.0.0.1:3306 mysql.example.com
こうするとホストOSのポート 3306
で対象サーバのMySQLサーバに接続されます。
なおその場合、phpMyAdminからは docker.for.mac.host.internal
というホスト名で接続します。
これはphpMyAdminのDockerコンテナからホストOSのmacOSへの接続名となります。