[解決済み] docker-composeでmongoデータベースをシードするには?
質問
私は、いくつかのリンクされたコンテナで実行されている、接続されたアプリケーションのセットを配布しようとしていますが、その中には、必要な mongo データベースが含まれています。
- いくつかのシード データを含んで配布されます。
- ユーザがデータを追加できるようにする。
理想的には、データはリンクされたデータボリュームコンテナに永続化されるでしょう。
データを
mongo
コンテナにデータを取り込むには
mongo
ベースインスタンスを使用して、ボリュームをマウントしない(dockerhub イメージ。
psychemedia/mongo_nomount
- これは基本的に mongo の Dockerfile から
VOLUME /data/db
ステートメント) と
Dockerfile
の行に沿ったコンフィグを行います。
ADD . /files
WORKDIR /files
RUN mkdir -p /data/db && mongod --fork --logpath=/tmp/mongodb.log && sleep 20 && \
mongoimport --db testdb --collection testcoll --type csv --headerline --file ./testdata.csv #&& mongod --shutdown
ここで
./testdata.csv
は同じディレクトリにある (
./mongo-with-data
)にあるDockerfileと同じです。
私のdocker-composeの設定ファイルには、以下のようなものがあります。
mongo:
#image: mongo
build: ./mongo-with-data
ports:
- "27017:27017"
#Ideally we should be able to mount this against a host directory
#volumes:
# - ./db/mongo/:/data/db
#volumes_from:
# - devmongodata
#devmongodata:
# command: echo created
# image: busybox
# volumes:
# - /data/db
VOLUME をマウントしようとすると、元のシードデータ (これは
/data/db
- に格納されている元のシードデータが削除されたように見えます。私は、ボリュームが
/data/db
にマウントされると、現在そこにあるものを置き換えるのだと思います。
とはいえ
docker userguide
は示唆しています。
ボリュームは、コンテナの作成時に初期化されます。コンテナのベースイメージが指定されたマウントポイントにデータを含んでいる場合、その既存のデータは、ボリュームの初期化時に新しいボリュームにコピーされる
? ということで、シードの後にVOLUMEコマンドを配置すれば、データが持続すると予想されました。
RUN
コマンドの後に配置すれば、データが持続すると期待したのですか?
では、私は何を間違えているのでしょうか?
長い目で見ると、リンクされた複数のコンテナのビルドを自動化し、そのコンテナに対して
Vagrantfile
/docker-compose YAML ファイルを配布し、リンクされたアプリのセットを起動します。
mongo
データベースを含む、リンクされたアプリを起動するYAMLファイルです。
どのように解決するのですか?
私は、mongo のシードを行い、終了することのみを目的とした別の docker コンテナを使用してこれを行います。これは、次のものと同じ考えだと思います。 ebaxt と同じ考えだと思いますが、これに対する答えを探していたとき、私はただ、迅速で汚い、しかしわかりやすい例を見たかっただけなのです。そこで、ここに私のものを示します。
docker-compose.yml
mongodb:
image: mongo
ports:
- "27017:27017"
mongo-seed:
build: ./mongo-seed
links:
- mongodb
# my webserver which uses mongo (not shown in example)
webserver:
build: ./webserver
ports:
- "80:80"
links:
- mongodb
mongo-seed/Dockerfile(ドッカーファイル
FROM mongo
COPY init.json /init.json
CMD mongoimport --host mongodb --db reach-engine --collection MyDummyCollection --type json --file /init.json --jsonArray
mongo-seed/init.json
[
{
"name": "Joe Smith",
"email": "[email protected]",
"age": 40,
"admin": false
},
{
"name": "Jen Ford",
"email": "[email protected]",
"age": 45,
"admin": true
}
]
関連
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] Dockerコンテナのシェルに入るにはどうしたらいいですか?
-
[解決済み] Dockerでデータベースなどの永続的なストレージを扱う方法
-
[解決済み] Docker-Composeを使用して、複数のコマンドを実行する方法
-
[解決済み】Dockerは仮想マシンとどう違うの?
-
[解決済み】Dockerコンテナのディスク使用量を分析する方法
-
[解決済み】docker composeでホストディレクトリをボリュームとしてマウントする方法
-
[解決済み】Docker化したPostgresデータベースのデータをボリュームで永続化する方法
-
[解決済み] 値が NULL ではないマングースクエリ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み] MongoDBでフィールドが存在することを確認する
-
[解決済み] MongoDBのデフォルトのユーザーとパスワードは何ですか?
-
[解決済み] ネストされた配列の中で、マッチしたサブドキュメントの要素のみを返す
-
[解決済み] mongodb aggregation sort
-
問題が発生しました -----mongodb-------Uncaught TypeError: 未定義のプロパティ 'value' を読み取れませんでした。
-
[解決済み] or' 条件を含む MongoDB クエリ
-
[解決済み】MongoDBのシェルで20以上のアイテム(ドキュメント)をプリントアウトする方法は?
-
[解決済み】データベースとしてのNoSQL(MongoDB) vs Lucene(またはSolr)【クローズド
-
[解決済み] MongoDB SELECT COUNT GROUP BY