docker-composeでMongoDBとMongo Expressを起動するには

NoSQLの一種、ドキュメント指向データベースのMongoDBと、Webブラウザで利用可能な管理ツールのMongo Expressをdockerで同時に起動したいと思います。

設定手順を記録しておこうと思います。

※19.6.28:Windows版のDockerでうまく動作しなかったため、ボリュームを使った方法を追記致しました。


MongoDB, Mongo Express起動用docker-compose設定手順

Dockerのインストール

下記のバージョンのDockerで、Windows 10とmacOSで動作を確認しました。どちらも問題なく動作しました。


docker-compose.yamlファイル作成

公式のDockerイメージを利用させて頂こうと思います。

ホストOSがLinux, macOSの場合

動作用のフォルダを作成後、docker-compose.yamlファイルを作成します。データが保存されるように、公式のdocker-compose.yamlファイルにvolumesを書き足した形になります。

下記の内容になります。

SELinuxが有効の場合、volumesの各行にラベルを付加する必要があります。

ホストOSがWindowsの場合

Docker for Windows Ver. 18.09.2で試したところ。

mongoコンテナの起動中、次のようなエラーが表示されて再起動してしまいます。

どうやらNTFS(ファイルシステム)が原因のようです。こちらの記事の回避方法を取らせて頂きました。

Windows用のdocker-compose.yamlファイルは下記になります。

Windowsの場合、ポート番号等をダブルクォーテーションまたはシングルクォーテーションで囲まないとうまく動作しませんでした。

またservicesのvolumesは使用せずに、別途mongodb-dataというボリュームを作成し、そちらにデータを入れます。このためDocker for WindowsのShared Drives設定は、下記のように不要になります。たとえばCドライブについて、こちらの設定を有効にした場合、Windowsファイル共有でCドライブ全体がネットワークに公開されてしまい、セキュリティ上のリスクが発生します。Windowsの場合はdocker volumeを使用したほうが、安全性が高いように思えます。


mongo, mongo-expressコンテナ起動

docker-composeコマンドで起動します。

イメージのダウンロードが始まり、ダウンロード完了後にmongoとmongo-expressが起動します。

mongo-expressはTCPポート番号8081で動作しているようです。


mongo-expressへアクセス

Webブラウザで下記のURLへアクセスすると、mongo-expressを利用できるようです。


mongo等のコマンドを使う場合

mongoコンテナでbashを起動後、mongo等の各種コマンドを利用できました。

Mongo Expressでデータベースを作成したところ、mongoコンテナに正常に反映されていました。


データのバックアップ/リストア

ホストOSがLinux, macOSの場合

mongodbのデータは、mongoディレクトリ直下のdbディレクトリに格納されます。バックアップはmongoフォルダごとバックアップを行えば問題ないかと思います。

リストアもmongoフォルダごと取り扱うかたちになります。

ホストOSがWindowsの場合

mongodb-dataボリュームのマウント

Windowsの場合、データはmongo_mongodb-dataボリュームに入るかたちになります。

docker-compose停止後、下記のコマンドでアクセスが可能のようです。ボリュームを/backupにマウントしてみました。

作成されたボリュームは59GBの容量でした。

/data/dbをmongodb-dataボリュームにリストア

以前、Docker for Macで動かしていた/data/dbディレクトリを、mongodb-dataボリュームにリストアしたいと思います。

  1. PowerShellのtarコマンドを使用して、dbディレクトリの内容をアーカイブし、mongo.tarファイルを作成しました。

  2. 先程のコマンド、ubuntuイメージでコンテナを起動し、/backupにボリュームをマウント、bashを起動します。
  3. 別のPowerSHellで、ubuntuのコンテナIDを確認し、docker cpコマンドでtarファイルをコピーします。

  4. ボリュームをマウントしたコンテナ内で、/backupディレクトリの内容を削除後、tarファイルを展開、パーミッションを変更しました。

以上でDocker for Windowsのmongodb-dataボリュームに、以前使用していたmongodbのデータをリストアすることができました。日常的なバックアップは、dockerのvolumeをバックアップするか、mongodbのダンプ機能を使用する感じでしょうか。


MongoDBの名前は、humongousに由来するようです。

なんとなく、こちらを思い出してしまいます・・・ヒューマンガス様ぁ!(モヒカン

スポンサーリンク

フォローする

スポンサーリンク