より自己完結型のアプローチ:
- データベースを初期化するJavaScriptファイルを作成する
- これらのファイルを含む派生MongoDBDockerイメージを作成します
使い捨て容器を使用したり、ボリュームを作成してそれらをリンクしたりする答えはたくさんありますが、これは非常に複雑に思えます。 mongo dockerイメージのdocker-entrypoint.shを見ると、206行目で/docker-entrypoint-initdb.d/*.js
が実行されていることがわかります。 構文を使用した初期化時のファイル:mongo <db> <js-file>
。シードデータを含む派生MongoDBDockerイメージを作成する場合は、次のことができます。
- シードデータを使用してmongoを立ち上げる単一のdockerrunコマンドがあります
- コンテナの停止と開始を通じてデータが保持される
- docker stop、rm、およびrunコマンドを使用してそのデータをリセットします
- k8s、mesos、swarm、rancherなどのランタイムスケジューラを使用して簡単にデプロイできます
このアプローチは、次の場合に特に適しています。
- 表示に現実的なデータが必要なPOC
- ブラックボックステストに一貫したデータを必要とするCI/CDパイプライン
- 製品デモ(セールスエンジニア、製品所有者)の展開例
方法:
- 初期化スクリプトを作成してテストします(必要に応じてデータをグルーミングします)
-
initスクリプトをコピーする派生イメージのDockerfileを作成します
FROM mongo:3.4 COPY seed-data.js /docker-entrypoint-initdb.d/
-
Dockerイメージを作成する
docker build -t mongo-sample-data:3.4 .
-
必要に応じて、他のユーザーが使用できるように画像をDockerレジストリにプッシュします
-
Dockerイメージを実行する
docker run \ --name mongo-sample-data \ -p 27017:27017 \ --restart=always \ -e MONGO_INITDB_DATABASE=application \ -d mongo-sample-data:3.4
デフォルトでは、docker-entrypoint.shはスクリプトをtest
に適用します db;上記の実行コマンドenvvarMONGO_INITDB_DATABASE=application
これらのスクリプトをapplication
に適用します 代わりにdb。または、jsファイルで別のデータベースを作成して切り替えることもできます。
これを実行するgithubリポジトリがあります-関連するファイルは次のとおりです。