2016-11-01 11 views
4

私はMongoDBとDockerを使って遊んでいます。この時点で私は自分自身が仕事で使うための便利なイメージを作成しようとしています。私が作成しているDockerfileMongoDBをドッキングするアドバイスが必要

FROM mongo:2.6 
MAINTAINER Reynier Perez <[email protected]> 
VOLUME /data/db /data/configdb 
CMD ["mongod"] 
EXPOSE 27017 

そして、私は私のdocker-compose.ymlファイルに追加しました:

  • ドI:私は私が作ったこのセットアップに関するいくつかの質問を持っている

    version: '2' 
    services: 
        ### PHP/Apache Container 
        php-apache: 
         container_name: "php55-dev" 
         image: reynierpm/php55-dev 
         ports: 
          - "80:80" 
         environment: 
          PHP_ERROR_REPORTING: 'E_ALL & ~E_DEPRECATED & ~E_NOTICE' 
         volumes: 
          - ~/mmi:/var/www 
          - ~/data:/data 
         links: 
          - mongodb 
        ### MongoDB Container 
        mongodb: 
         container_name: "mongodb" 
         build: ./mongo 
         environment: 
          MONGODB_USER: "xxxx" 
          MONGODB_DATABASE: "xxxx" 
          MONGODB_PASS: "xxxx" 
         ports: 
          - "27017:27017" 
         volumes: 
          - ~/data/mongo:/data/db 
    

    Dockerfileにある必要があります。または、この行を表示するには十分でしょう~/data/mongo:/data/configdbdocker-compose.yml

  • 私はMongoイメージを作成するとすぐに、データベースを作成し、環境変数にパスワードを設定してユーザーに完全な権限を与えることを前提としています(hereから)。私は正しいですよ? (何か助けが得られませんでしたhere
  • mongoコンテナに作成する必要があるデータベースに、現在のmongoバックアップ(いくつかのJSONファイル)をインポートするにはどうすればよいですか?私はmongorestoreコマンドを実行する必要があると信じているが、どのように?コンテナを開始するたびにスクリプトを作成して実行する必要がありますか?またはイメージ作成中に実行する必要がありますか?最善のアプローチは何ですか?

答えて

3

私はDockerfileでVOLUME /データ/ DB /データ/てConfigDBが必要ですか。このライン〜/データ/モンゴを持っているのに十分だろう:ドッキングウィンドウ-compose.ymlに/データ/てConfigDB?

VOLUMEは、ホストディレクトリをマウントしているときは必須ではありませんが、メタデータとして役立ちます。 VOLUMEは、Dockerボリューム(非ホストディレクトリ)をマウントするときに、データの初期化方法の選択に影響する特別な「ボリューム作成時のデータコピー」セマンティクスを提供します。できるだけ早く私はMongoのイメージを構築するように私は、データベースを作成し、それが環境変数にだとパスワードを使用して、ユーザーに完全な権限を与えることになることを

は想定しています(と私はここからそれを取りましたか)?私は正しいですよ?

MONGO_USERMONGO_DATABASEMONGO_PASSは、それ自体official mongo Docker imagemongodに何もしない(私はここで役に立つ何かを見つけることができませんでした)。同様の環境変数の

のmongo画像が追加されましたサポート:私は現在のmongoバックアップ(いくつかのJSONファイルをインポートするにはどうすればよい

  • MONGO_INITDB_ROOT_USERNAME
  • MONGO_INITDB_ROOT_PASSWORD
  • MONGO_INITDB_DATABASE

)をmongoコンテナに作成するデータベースに追加しますか?私はmongorestoreコマンドを実行する必要があると信じているが、どのように?コンテナを開始するたびにスクリプトを作成して実行する必要がありますか?またはイメージ作成中に実行する必要がありますか?最善のアプローチは何ですか?

ビルド時または実行時にデータを初期化するかどうかは、使用するかどうかによって決まります。前述のように、Dockerは指定されたVOLUMEのデータを作成したボリュームにコピーできます。ホストディレクトリをマウントしている場合は、おそらく実行時に初期化を行う必要があります。

mongorestoreに復元するには実行中のサーバーが必要です。ビルド中にlaunch the server and restore in the same RUN stepにする必要があります。実行時に、データベースの存在をチェックする起動スクリプトを組み込む必要があるかもしれません。

Mongoは空のディレクトリを空のmongoインスタンスに初期化できるため、mongoが起動しないことを心配する必要はありません。

+0

私はAnabilitiesから始めようとしましたが、これがまだ成長しているのであれば、もう一度それを検討するつもりです。あなたの答えを正しいものとして受け入れても、DBを作成してユーザーを追加するためのbashの簡単なスクリプト例を追加すると改善できますか?私は手がかりを持っていない – ReynierPM

関連する問題