Docker版AdminerでMongoDBを利用するためのDockerfile
AdminerでMongoDBも見れるということなので設定してみました。
キッカケは、MariaDBをいれたとき、Adminerもセットで入れたのですが、MongoDBも対応しているのようなので、どんなふうになるのかな?と思い入れてみようとなりました。
結果は、1日くらいChatGPTに聞きながら、苦労してできるようになったけど、一覧が見える程度のものだったので、「何の成果も得られませんでした〜〜!」状態でした。
以下イメージです。
データベースを作成とか、更新系は実行してみても動作しないようでした、中身が確認できる程度ですかね。
Dockerfileの例はネットにいくつかあったのですが、それが現在の4.8.1では全く動作しなかったことが時間がかかった原因です。なぜなんだろう?
前提条件
OS: Linux Mint 21.3
Docker Desktop 4.32.0 (157355)
Docker version 27.0.3, build 7d4bcd8
Docker Compose version v2.28.1-desktop.1
フォルダ構成
(ワークディレクトリ)/adminermongo Dockerfileとdocker-compose.ymlの格納場所
(ワークディレクトリ)/adminermongo/data MongoDBのデータ格納場所
手順
Dockerfileを以下の内容で作成します。
FROM adminer:4.8.1
USER root
RUN apt-get update && apt-get install -y \
build-essential \
php-dev \
pkg-config \
libssl-dev \
libcurl4-openssl-dev \
wget
RUN wget https://pecl.php.net/get/mongodb-1.19.3.tgz && \
tar -xzf mongodb-1.19.3.tgz && \
cd mongodb-1.19.3 && \
phpize && \
./configure && \
make && make install && \
echo "extension=mongodb.so" >> /etc/php/7.4/cli/php.ini
RUN apt-get purge -y build-essential php-dev pkg-config libssl-dev libcurl4-openssl-dev wget && apt-get clean -y && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
rm -rf mongodb-1.19.3 && \
rm mongodb-1.19.3.tgz
USER adminer
docker-compose.ymlを以下の内容で作成します。
# mongodbと管理ツールのadminer
services:
db:
container_name: mongodb
image: mongo
# restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: adminermongotest
ports:
- 27017:27017
volumes:
- ./data/db:/data/db
- ./data/configdb:/data/configdb
adminer:
container_name: mongo-adminer
build:
context: .
dockerfile: Dockerfile
# restart: always
ports:
- 8080:8080
以下のコマンドでサービスを構築し、起動します。ビルドに少し時間がかかります。わたしの環境の場合、約3分くらいでしょうか。
これで以下にブラウザでアクセスすれば、ログイン画面が表示されます。
既存のmongodbコンテナにつなげに行く場合は、このネットワークに参加させると見れるようになりました。例えば「somemongo」につなぎたい場合は以下のコマンドを実行して、ログイン画面のサーバー欄を「somemongo」にすればつながりました。
参考URL
Adminer MongoDB docker image
https://gist.github.com/cilf/017348bfbce87fb95ff61e295415a54f
finwo/docker-adminer
https://codeberg.org/finwo/docker-adminer/src/branch/master/Dockerfile
ハマった点
これは、ChatGPTとのやりとりから記入しています。
現時点の4.8.1では「apk」がなく動かなかった。出たエラーをChatGPTに調べてもらって解決。Alpine Linuxベースではなく、Debianベースになっているからだそうです。
現時点の4.8.1では「pecl」がなく動かなかった。出たエラーをChatGPTに調べてもらって解決。「php-pear」を「apt-get」でインストールすることで対応。
現時点の4.8.1では「pecl」の実行中のダウンロードでエラーになった。出たエラーをChatGPTに調べてもらって解決。「pecl」でだめなら、直接makeしてインストールしろと!
現時点の4.8.1では「docker-php-ext-enable」がなく動かなかった。出たエラーをChatGPTに調べてもらって解決。以下でやってみようとなった。
RUN php_ini_path=$(find / -name php.ini | grep 'php.ini') && \
echo "extension=mongodb.so" >> $php_ini_path
直前のコマンドでやるとphp.iniが見つからないとなった。しかし、実際には存在していた。ビルドプロセスでは動かないのか?原因はわかりませんでした。なので、直接やることにした。これは成功しました。
echo "extension=mongodb.so" >> /etc/php/7.4/cli/php.ini
ハマったポイントは、以下の2点ですかね。
なぜか、Alpine Linuxベースではなく、Debianベースになっていた。
普通動くだろうことが、Dockerイメージのビルドではエラーになった。
以上