手っ取り早くAdminer
新しくジョインしたプロジェクトでAPIの設計が機能要求を満たしているか確認してほしいというリクエストをもらったのですけど、立ち上げ初期のプロジェクトでデータベースの定義書はあるもののER図はなく、触りたいならコンソールでという状況でした。出来ないの?と聞かれれば出来なくは無いですけど、正直、視覚的にデータベースを確認出来た方が生産性は上がります。というわけでAdminerを入れたい。
でもソースコードにAdminerを入れて万が一本番環境へ上がってしまったらそれはそれで困ります。さすがにそんな提案はしたくない。どうしましょう?
ローカルだけで動かせば良いじゃん
はい、そうですね。でもソースコードに含まれている
docker-compose.yml
に追加するのはそれもそれで気が引けます。万が一(略)。というわけわけで、リポジトリに上げない形で別コンテナを用意してそこからデータベースに接続しましょう。必要なモノは以下の通りです。- Adminerコンテナ
- DBコンテナへのネットワーク設定
Adminerコンテナ
適当なフォルダを作って、中にこんな感じのdocker-compose.yml
を作成しましょう。version: '3.8'
services:
adminer:
container_name: adminer
hostname: adminer
image: adminer:latest
restart: always
ports:
- 18080:8080
networks:
- db-network
networks:
db-network:
name: db_default
あとはこれをBuildして起動すれば終わりです。一般的な環境では
http://localhost:10800
でアクセス出来るようになります。ポイント:ネットワークには名前を付けましょう
ネットワークに名前を付けなかった場合、docker-compose.yml
ごとにネットワークが自動で生成されます。$ docker network ls
NETWORK ID NAME DRIVER SCOPE
123456789012 adminer_default bridge local
234567890123 bridge bridge local
345678901234 host host local
456789012345 db_default bridge local
これだと同じネットワーク上にならないのでアクセス出来ません。必ず名前を付けましょう。
Adminerコンテナ用の
docker-compose.yml
にDB用コンテナのデフォルトネットワーク名を設定すれば大丈夫です。余談:これを英語で提案しないと
今度のプロジェクトは外資系というわけでは無いんですけどメンバーに外国人が多いんですよ。PMなど要職の人間は日本語も英語もペラペラなんですけど、チームリーダーには英語のみ喋れる人もいて、しかもその人がインフラ担当。なのでこの提案を通したかったら英語でプレゼンしないといけないという……一般論としてSEじゃないプログラマ寄りのエンジニアの人って「Adminer?初心者向けだろ」って言いそうだし(古いバージョンでは脆弱性もあるし今後もないとはいいきれない)、なおかつそれが外国人で議論に発展したらDeepLでも追いつかない気がしてちょっと気が引けてます。
まーーーー、本番環境に影響を与えるモノじゃないから好きにしていいよっていってもらえると思うんですけど。
ちょっと英語でのコミュニケーションも勉強しないとなあ。読むしか出来ないもんなあ。
追記
当初案ではソースコードに手を加えていたので気が引けていたのですけど、デフォルトネットワーク名を設定しさえすれば別に既存のファイルを触らなくてもローカルでAdminerが動かせることが解ったので、問題なくなりました。英語での提案自体はして、ちゃんと通じたみたいですけどね。ちなみにリアクションはもちろん聞き取れませんでした(笑)技術者同士だから単語ベースでは解るんですけど、全体の正確な文意となると難しいんですよねー。MTGで英語聞き続けてたら解るようになるのかな。