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分くらいでしょうか。

docker compose up -d

これで以下にブラウザでアクセスすれば、ログイン画面が表示されます。

http://localhost:8080/

既存のmongodbコンテナにつなげに行く場合は、このネットワークに参加させると見れるようになりました。例えば「somemongo」につなぎたい場合は以下のコマンドを実行して、ログイン画面のサーバー欄を「somemongo」にすればつながりました。

docker network connect adminermongo_default 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イメージのビルドではエラーになった。

以上

この記事が気に入ったらサポートをしてみませんか?