Docker で Adminer を使ってデータベースを管理
はじめに
前回の「Docker で Apache 2 + PHP 7.4 + PostgreSQL 12 環境を構築する方法」では、Docker 公式イメージを使った PHP + PostgreSQL 環境の構築方法をご紹介しました。
ところで PHP で動く PostgreSQL の管理ツールとして phpPgAdmin が有名ですが、執筆時点では最終リリースが2019年12月で、また Docker 公式イメージは見当たりませんでした。
- Releases · phppgadmin/phppgadmin · GitHub
- https://github.com/phppgadmin/phppgadmin/releases
同様の機能を持つツールを探す中で Adminer を知り、Docker Hub で検索したところ公式イメージもみつかりました。
- Adminer - Database management in a single PHP file
- https://www.adminer.org/
そこで今日は Docker compose を用いて Adminer の公式イメージでコンテナを作る方法 をご紹介します。
- Docker
- 19.03.1
- Docker Compose
- 1.24.1
- Adminer
- 4.7.7
- PostgreSQL
- 12.3
Adminer コンテナの作り方
Adminer コンテナは docker-compose.yml を下記のように書くことで使うことができます。
version: "3"
services:
myapp-adminer:
container_name: myapp-adminer
image: adminer:4.7-standalone
environment:
# ホストの初期値
ADMINER_DEFAULT_SERVER: myapp-db
# デザイン
ADMINER_DESIGN: ng9
# 8080 ポートに割り当て
ports:
- "8080:8080"
myapp-db:
container_name: myapp-db
image: postgres:12-alpine
environment:
POSTGRES_DB: sampledb
POSTGRES_USER: sample-user
POSTGRES_PASSWORD: hi2mi4i6
そして下記コマンドでビルドしてください。
$ docker-compose up -d
Adminer の URL は、ポートを 8080 に割り当てているので、
http://localhost:8080 や http://192.168.99.100:8080 などになります。
(Docker の設定により異なります)
サンプルのように PostgreSQL などをお使いの場合は、ログイン時に「データベース種類」の変更を忘れないようにご注意ください。
(デフォルトでは MySQL になっていて、そのままだと Connection refused のエラーになります)
- ports (Compose file version 3 reference | Docker Documentation)
- https://docs.docker.com/compose/compose-file/#ports
Adminer の image には大きく分けて standalone と fastcgi の2種類があり、「latest」や「4.7」のようにそれらの記述がないものは standalone のようです。
(今回は分かりやすさの点から 4.7 ではなく 4.7-standalone を使っています)
基本的には standalone の方を使い、もし別の FastCGI サーバで Adminer を動かしたい場合は fastcgi がいいみたいです。
- adminer Tags - Docker Hub
- https://hub.docker.com/_/adminer?tab=tags
environment の ADMINER_DEFAULT_SERVER でデータベースのコンテナを指定します。
ユーザー情報やデータベース名を指定するパラーメータは無いみたいです。
ADMINER_DESIGN で指定しているのはデザイン(テーマ)で、下記 Adminer 公式サイトで紹介されています。
日本語表示だと見にくくなるものがありました。
- Alternative designs (Adminer - Database management in a single PHP file)
- https://www.adminer.org/#extras
また、今回は使っていませんが ADMINER_PLUGINS の指定でプラグインが使えるそうです。詳しくは下記 Docker Hub の Adminer のページをご確認ください。
- adminer - Docker Hub
- https://hub.docker.com/_/adminer