MongoDBは、高いパフォーマンスと優れた柔軟性を提供する、人気のあるオープンソースのドキュメントデータベースです。しかし、プロジェクト用にMongoDBデータベースをコンテナー化しようとしましたか?そうでない場合は、ご馳走になります!
このチュートリアルでは、Dockerを使用してMongoDBを効果的にデプロイ、保護、および管理する方法を学習します。読んで、DockerMongoDBコンテナーのデプロイのマスターになりましょう!
前提条件
このチュートリアルは、実践的なデモンストレーションで構成されています。フォローするには、次のものがあることを確認してください。
- Ubuntuマシン–このチュートリアルではUbuntu20.04LTSを使用します
-
sudo
を持つユーザー 許可 - Docker –このチュートリアルではDocker20.10.9を使用します
DockerMongoDBイメージのダウンロード
Docker MongoDBコンテナーをデプロイおよび管理する前に、MongoDBコンテナーをローカルで実行できるように、まずDockerHubからMongoDBイメージをダウンロードする必要があります。
docker
を実行します 以下のコマンドを使用して、MongoDB Community Edition(CE)イメージをダウンロードします( pull mongo
)、DockerHubがホストしている。執筆時点でのこの画像の最新バージョンは4.2です。
sudo docker pull mongo
以下に示すように、コマンドは画像の最新バージョンを自動的にプルし、最新としてタグ付けします 。
次に、 docker images
を実行します サーバーで利用可能なすべての画像を一覧表示するには、以下のコマンドを使用してください。
sudo docker images
以下に、最新のタグが付けられたMongoDBイメージを示します。 。
DockerMongoDBコンテナーのデプロイ
ダウンロードしたMongoDBイメージから、MongoDBコンテナーをデプロイできるようになりました。 MongoDBコンテナをmongo実行可能ファイルで初期化し、データディレクトリを作成します。次に、Dockerコンテナのデータ領域とホストマシン間のマッピングを定義します。
1. mkdir
を実行します 以下のコマンドを使用して、 mongodata
という名前のデータディレクトリを作成します MongoDBデータベースとログを保存します。
sudo mkdir -p /mongodata
2.次に、 docker run
を実行します 以下のコマンドを使用して、 mymongo
という名前のコンテナを作成します 。さらに、コンテナはインタラクティブな疑似TTY( -it
)で開始されます )、コンテナの起動時に出力を表示する必要がある場合。
最後に、新しく作成されたディレクトリ mongodata バインドされています( -v
)内部ディレクトリ / data / db 。 -d
オプションは、コンテナをデタッチモードで開始するため、バックグラウンドプロセスとして実行され、作成時にコンソール出力を返します。
システムは自動的に/data / dbを作成します コンテナを実行して、コンテナに加えた変更のデータを格納するときのディレクトリ。このディレクトリは読み取り専用と同様のモードで実行され、ホストシステムでの永続的なデータストレージを有効にします。
sudo docker run -it -v mongodata:/data/db --name mymongo -d mongo
コマンドが正常に完了すると、次のような出力が表示されます。
3.最後に、 docker ps
を実行します 以下のコマンドを使用して、コンテナのIDを識別し、そのステータスを確認します。 docker ps
コマンドは、現在実行中のコンテナに関するすべての情報を表示します。
docker ps
コマンドは通常のps
に相当します Linuxのコマンド。
sudo docker ps
以下に示す出力では、ポートを確認できます。 着信接続をリッスンするためにコンテナに割り当てられたすべてのポートを一覧表示するセクション。
この例では、ポート 27017 ホストにマップされます。以下の出力は、 localhost:27017を介してこのコンテナー上のMongoDBインスタンスにアクセスできることを示しています。 ホストから。
mymongo
のログファイルを見たいと思うかもしれません 何か問題が発生したときにmongoデータベース/インスタンスで何が起こったかを判別するためのコンテナー。その場合は、docker logs
を実行します 次のようなコマンド:sudo docker logs docker-container
。docker-container
を置き換えます Dockerコンテナ名の名前を使用します。
DockerMongoDBコンテナーをBashシェルに接続する
Docker MongoDBコンテナーをデプロイしたばかりですが、どのように管理しますか?これを行うには、 docker exec
を使用してDockerコンテナをBashシェルにアタッチします。 最初にコマンドを実行します。
コンテナーは現在デタッチモードで実行されている(バックグラウンドで実行されている)ため、コンテナーをBashシェルにアタッチすることは非常に重要です。また、コンテナがバックグラウンドで実行されている場合、コンテナは入力も表示出力も受け取りません。
docker exec
を実行します コンテナをアタッチするには、以下のコマンド( mymongo
)Bashシェルに。
sudo docker exec -it mymongo bash
コマンドが完了すると、プロンプトは次のようなものに変わります。一意の英数字番号( 77782fa95314 )はコンテナIDです。
コンテナIDは、名前の競合を回避し、ホスト間のコンテナを効果的に識別するために不可欠です。したがって、それらを変更しないようにしてください。
次に、 mongo
を実行します コンテナ(mymongo)のMongoDBシェルにログインするための引数なしのコマンド。 MongoDBシェルは、mongoクエリ/コマンドを実行する場所です。
コンテナに入ったら、
sudo
なしで任意のコマンドを実行できます コンテナ内のrootユーザーになっているため、プレフィックス。コンテナに加えたすべての変更は、ホストシステムに影響を与えません。
mongo
以下に示すプロンプトを見ると、MongoDBシェルにいることがわかります。
MongoDBシェルで使用可能なすべてのコマンドを表示する場合は、
help
を実行します。 以下に示すように、コマンド。
管理MongoDBユーザーの作成
Dockerコンテナー内にMongoDBサーバーをデプロイした後、管理用MongoDBユーザーを作成します。管理ユーザーは、MongoDBサーバーに接続してデータベースを管理できます。
1. MongoDBシェルに再度ログインし、 use
を実行します 以下のコマンドを使用して、最初に admin
に切り替えます データベース。そうすることで、管理ユーザーにデータベースを管理するための適切な権限が与えられます。
use admin
次のコードをコピーしてMongoDBプロンプトに貼り付け、管理ユーザーを作成します。
以下のコードはdb.createUser()
を使用しています 管理者の役割を持つユーザーを作成する方法。ユーザー名( user
)とパスワード( pwd
)以下はハードコードされており、好みに応じて変更できます。
# Create an administrative user
db.createUser(
{
# Sets the username for the administrative user
user: "ata",
# Sets the password for the administrative user
pwd: "password123",
# Sets the roles for the administrative user
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
コードが機能する場合は、MongoDBプロンプトに次のようなメッセージが表示されます。
3. quit()
を実行します 以下のクエリを実行して、MongoDBシェルを終了します。
quit()
4.最後に、次の mongo
を実行します 作成した管理ユーザーをテストするコマンド( ata
)MongoDBサーバーに接続します。プロンプトが表示されたら、管理ユーザーのパスワードを入力します。
mongo -u ata -p --authenticationDatabase admin
以下に示すように、サーバーに正常に接続すると、MongoDBサーバーはMongoDBサーバーのバージョンを出力します。
おそらく、管理ユーザーをさらにテストしたいでしょう。その場合は、以下のコマンドを実行して、データベース内のすべてのユーザーを表示します。
use admin
show users
以下に、作成した管理ユーザーがリストに含まれていることを確認できます。
MongoDBデータベースの作成
Docker MongoDBコンテナーの管理は、データベースを作成しないと完了しません。新しいMongoDBデータベースを作成し、MongoDBシェルを介してデータを保存します。
1. Dockerコンテナー内の対話型セッション内から、 show dbs
を実行します サーバー内のすべてのデータベースを一覧表示するには、以下のコマンドを実行します。
show dbs
以下に、管理データベース、構成データベース、およびローカルデータベースを示します。 MongoDBシェルは、デフォルトですべてのMongoDBサーバーにこれらのデータベースを作成します。
2.次に、 use
を実行します 以下のコマンドを使用して、新しいデータベースを作成します。
を置き換えます 選択したデータベース名を使用します。ただし、この例では、データベースの名前は linux
です。 。
使用コード> queryは、現在のデータベースを、存在する場合は指定したデータベースに切り替えます。そうでない場合は、
use
クエリは新しいデータベースを作成し、自動的にそれに切り替えます。
use <database_name>
3. show dbs
を再実行します 以前に行ったように(ステップ1)コマンドを実行して、作成したデータベースが存在するかどうかを確認します。
show dbs
それでも、新しく作成されたデータベース(Linux)がリストに表示されませんか? MongoDBは、初めてデータをデータベースに保存するときにのみデータベースを構築します。データは、コレクションまたはドキュメントの形式である場合があります。
4.次に、以下のコードをコピーしてMongoDBシェルに貼り付け、 Enterを押します。 。
以下のコードは、 linux_version
という名前の新しいコレクションを作成します 、お好みの名前に変更できます。コレクションには、キーと値のペアの形式のデータが含まれています。
# Using insertOne method to insert data
db.linux_version.insertOne(
# Key:value pairs to insert to the database
{ "debian" : "11",
"ubuntu" : "20.04",
"rocky linux" : "8.4",
"alma linux" : "8"
}
)
以下の出力では、 linux_version
を確認できます。 コレクションが作成され、 ObjectIDが付属します 。
5. show collections
を実行します コレクションのリストを表示し、新しいコレクションが linux_version
かどうかを確認するコマンド 存在します。
show collections
linux_versionが正常に作成されたことを以下に示します。 コレクション。
6.最後に、以下のコマンドを実行して、 linux_version
に挿入したデータを表示および確認します。 コレクションは正しいです。 pretty()メソッドを使用すると、人間が読める形式でデータを表示できます。
db.linux_version.find().pretty()
データベース内のデータを変更する場合は、
Update()
を使用してください メソッド。
以下の出力は非常に読みやすい形式であることがわかります。
DockerMongoDBコンテナーの再起動
これで、DockerMongoDBコンテナーが正常に実行されました。しかし、コンテナを使用できなくなった場合、またはコンテナが機能しなくなった場合はどうなりますか?いくつかのDockerコマンドは、MongoDB Dockerコンテナーを停止、再起動、さらには削除するのに役立ちます。
1. docker ps
を実行します 以下のコマンドを実行して、実行中のすべてのコンテナを一覧表示します。
sudo docker ps
以下に示すように、停止、再起動、または削除するコンテナーの名前とコンテナーIDをメモします。
2.次に、 docker stop
のいずれかを実行します 実行中のMongoDBコンテナーを停止するには、以下のコマンドを使用します。
sudo docker stop mymongo
sudo docker stop container-ID
3. docker ps
を再実行します 以前に行ったようにコマンド(ステップ1)を実行して、コンテナーがシャットダウンしたかどうかを確認します。
sudo docker ps
以下に示すように、コンテナは実行中のコンテナのリストに含まれていません。これは、コンテナが正常に停止したことを示しています。
4.次に、 docker start
のいずれかを実行します コンテナを再起動する場合は、以下のコマンドを使用してください。
sudo docker start mymongo
sudo docker start container-ID
5.最後に、 docker ps
を再実行します コンテナが実行されているかどうかを確認するコマンド。
sudo docker ps
おそらく、コンテナをこれ以上使用する必要はありません。その場合は、最初にコンテナを停止して、
rm
を実行する必要があります 次のように、コンテナを削除するコマンド:sudo docker container rm mongodb
。前の例と同様に、mongodb
を置き換えます コンテナ名またはコンテナIDのいずれかを使用します。
結論
このチュートリアルでは、データベースを作成してデータを格納する管理者ユーザーを作成することにより、DockerMongoDBコンテナーをデプロイおよび管理する方法を学習しました。 Dockerイメージをクリーンに保つ必要がなくなったコンテナーを停止、再起動、および削除できることに気づきました。
Dockerを使用したMongoDBのデプロイと管理は、コンテナー化テクノロジーを活用してオーバーヘッドを削減するための最初のステップです。この最初のステップを使用して、MongoDBをさらに詳しく調べ、Docker MongoDBコンテナーがプロジェクトにどのように役立つかを確認してみませんか?