sql >> データベース >  >> NoSQL >> MongoDB

Dockerを使用したMongoDBのデプロイ

    MongoDBを使用する主な利点は、使いやすいことです。 MongoDBを簡単にインストールして、数分で作業を開始できます。 Dockerを使用すると、このプロセスがさらに簡単になります。

    Dockerの優れた点の1つは、わずかな労力といくつかの構成で、コンテナーを起動して任意のテクノロジーの作業を開始できることです。この記事では、Dockerを使用してMongoDBコンテナーを起動し、ストレージボリュームをホストシステムからコンテナーに接続する方法を学習します。

    DockerにMongoDBをデプロイするための前提条件

    このチュートリアルでは、Dockerをシステムにインストールするだけで済みます。

    MongoDBイメージの作成

    最初にフォルダを作成し、そのフォルダ内にDockerfileという名前のファイルを作成します。

    $ mkdir mongo-with-docker
    $ cd mongo-with-docker
    $ vi Dockerfile

    このコンテンツをDockerfileに貼り付けます:

    FROM debian:jessie-slim
    RUN apt-get update && \
    apt-get install -y ca-certificates && \
    rm -rf /var/lib/apt/lists/*
    RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 0C49F3730359A14518585931BC711F9BA15703C6 && \
    gpg --export $GPG_KEYS > /etc/apt/trusted.gpg.d/mongodb.gpg
    ARG MONGO_PACKAGE=mongodb-org
    ARG MONGO_REPO=repo.mongodb.org
    ENV MONGO_PACKAGE=${MONGO_PACKAGE} MONGO_REPO=${MONGO_REPO}
    ENV MONGO_MAJOR 3.4
    ENV MONGO_VERSION 3.4.18
    RUN echo "deb http://$MONGO_REPO/apt/debian jessie/${MONGO_PACKAGE%-unstable}/$MONGO_MAJOR main" | tee "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
    RUN echo "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
    RUN apt-get update
    RUN apt-get install -y ${MONGO_PACKAGE}=$MONGO_VERSION
    VOLUME ["/data/db"]
    WORKDIR /data
    EXPOSE 27017
    CMD ["mongod", "--smallfiles"]

    次に、次のコマンドを実行して、独自のMongoDBDockerイメージを構築します。

    docker build -t hello-mongo:latest .

    Dockerファイルの内容を理解する

    Dockerファイルの各行の構造は次のとおりです。

    INSTRUCTIONS arguments
    • FROM:コンテナの構築を開始するベースイメージ
    • RUN:このコマンドは、MongoDBをベースイメージにインストールするためのすべての命令を実行します。
    • ARG:Dockerビルドのデフォルト値をいくつか保存します。これらの値は、コンテナーでは使用できません。 --build-arg引数を使用して、イメージの構築プロセス中にオーバーライドできます。
    • ENV:これらの値は、ビルドフェーズ中およびコンテナーの起動後に使用できます。 -e引数をdockerrunコマンドに渡すことでオーバーライドできます。
    • ボリューム:data/dbボリュームをコンテナーに接続します。
    • WORKDIR:RUNまたはCMDコマンドを実行するように作業ディレクトリを設定します。
    • EXPOSE:システムをホストするためにコンテナのポートを公開します(外部)。
    • CMD:コンテナ内のmongodインスタンスを開始します。
    SomeninesがMongoDBDBAになる-MongoDBを本番環境に導入MongoDBDownloadを無料でデプロイ、監視、管理、スケーリングするために知っておくべきことを学びましょう

    イメージからのMongoDBコンテナの起動

    次のコマンドを発行して、MongoDBコンテナーを起動できます。

    docker run --name my-mongo -d -v /tmp/mongodb:/data/db -p 27017:27017 hello-mongo
    • -name:コンテナの名前。
    • -d:コンテナをバックグラウンド(デーモン)プロセスとして開始します。コンテナをフォアグラウンドプロセスとして実行するためにこの引数を指定しないでください。
    • -v:ホストシステムの/ tmp/mongodbボリュームをコンテナーの/data/dbボリュームに接続します。
    • -p:ホストポートをコンテナポートにマップします。
    • 最後の引数は画像の名前/IDです。

    コンテナが実行されているかどうかを確認するには、次のコマンドを発行します。

    docker ps

    このコマンドの出力は次のようになります。

    CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS              PORTS                      NAMES
    a7e04bae0c53        hello-mongo         "mongod --smallfiles"   7 seconds ago       Up 6 seconds        0.0.0.0:27017->27017/tcp   my-mongo

    ホストからMongoDBにアクセスする

    コンテナが起動して実行されると、リモートのMongoDBインスタンスにアクセスするのと同じ方法でコンテナにアクセスできます。 CompassやRobomongoなどのユーティリティを使用して、このインスタンスに接続できます。今のところ、mongoコマンドを使用して接続します。ターミナルで次のコマンドを実行します:

    mongo 27017

    これにより、mongoシェルが開き、mongoコマンドを実行できます。次に、1つのデータベースを作成し、そのデータベースにデータを追加します。

    use mydb
    db.myColl.insert({“name”: “severalnines”})
    quit()

    次に、ボリュームマッピングが正しいかどうかを確認するために、コンテナを再起動して、データが含まれているかどうかを確認します。

    Docker restart <container_id>

    ここで再びmongoシェルに接続し、次のコマンドを実行します:

    db.myColl.find().pretty()

    次の結果が表示されます:

    { "_id" : ObjectId("5be7e05d20aab8d0622adf46"), "name" : "severalnines" }

    これは、コンテナを再起動した後でも、コンテナがデータベースデータを保持していることを意味します。これは、ボリュームマッピングのために可能です。コンテナは、すべてのデータをホストシステムの/ tmp/mongodbディレクトリに保存します。そのため、コンテナを再起動すると、コンテナ内のすべてのデータが消去され、新しいコンテナがホストのtmp/mongodbディレクトリのデータにアクセスします。

    MongoDBコンテナシェルへのアクセス

    $ docker exec -it <container-name> /bin/bash

    MongoDBコンテナログへのアクセス

    $ docker logs <container-name>

    別のコンテナからMongoDBコンテナに接続する

    次の構造に従う--link引数を使用して、他のコンテナーからMongoDBコンテナーに接続できます。

    --link <Container Name/Id>:<Alias>

    ここで、Aliasはリンク名のエイリアスです。このコマンドを実行して、Mongoコンテナーをexpress-mongoコンテナーにリンクします。

    docker run --link my-mongo:mongo -p 8081:8081 mongo-express

    このコマンドは、dockerhubからmongo-expressイメージをプルし、新しいコンテナーを開始します。 Mongo-expressは、MongoDBの管理UIです。次に、http:// localhost:8081にアクセスして、このインターフェイスにアクセスします。

    Mongo-express Admin UI

    結論

    この記事では、MongoDBイメージを最初からデプロイする方法と、Dockerを使用してMongoDBコンテナーを作成する方法を学びました。また、ボリュームマッピングや、リンクを使用して別のコンテナーからMongoDBコンテナーに接続するなどの重要な概念についても説明しました。

    Dockerは、複数のMongoDBインスタンスをデプロイするプロセスを容易にします。同じMongoDBイメージを使用して、レプリカセットの作成に使用できる任意の数のコンテナーを構築できます。このプロセスをさらにスムーズにするために、YAMLファイル(構成ファイル)を作成し、docker-composeユーティリティを使用して、1つのコマンドですべてのコンテナーをデプロイできます。


    1. JSONを表すRedis文字列とRedisハッシュ:効率?

    2. MongoDb:$ push /$addtosetの違い

    3. mongodbは複数の配列アイテムで検索します

    4. Mongodb:$in演算子と多くの単一クエリ