【原创】Docker 安装运行 MongoDB

安装准备

1、简介

MongoDB 是目前非常流行的文档式数据库,我们在开发与测试的过程中如何要使用也是比较简单的,特别是使用 Docker 的方式。

本文介绍使用 Docker 安装运行 MongoDB.

2、安装环境

Ubuntu 18.04.5
Docker 19.03.6
MongoDB 4.4.1

3、注意事项

下方使用 Docker 运行的 MongoDB 只用于开发与测试,请不要在生产环境使用此方法安装。如果你有生产环境部署 MongoDB 的需求,请参考附录中 MongoDB 官网的手册。

Mongo 镜像的 Docker 镜像由 Docker 社区提供支持与维护,MongoDB 官方不提供支持。

安装步骤

1、拉取镜像

执行如下命令拉取 mongo 的最新镜像。

docker pull mongo

注:

(1) 这里的最新镜像的 MongoDB 版本不一定是 MongoDB 官方的最新版本,因为它不由 MongoDB 官方支持与维护,而是由 Docker 社区维护,所以它的版本与官方可能有所延迟。

(2) 如果你需要拉取指定版本的 mongo,请使用 docker pull mongo:tag(其中 tag 表示具体的版本号,如 3.1)

示例:

$ docker pull mongo                        
Using default tag: latest
latest: Pulling from library/mongo
171857c49d0f: Already exists 
419640447d26: Already exists 
61e52f862619: Already exists 
892787ca4521: Pull complete 
06e2d54757a5: Pull complete 
e2f7d90822f3: Pull complete 
f518d3776320: Pull complete 
feb8e9d469d8: Pull complete 
69705b632494: Pull complete 
c7daea26376d: Pull complete 
13d1f9e1fc77: Pull complete 
f87e65fe7ffd: Pull complete 
Digest: sha256:efc408845bc917d0b7fd97a8590e9c8d3c314f58cee651bd3030c9cf2ce9032d
Status: Downloaded newer image for mongo:latest
docker.io/library/mongo:latest

2、运行 MongoDB

事实上,你只需要一条如下的简单命令就可以运行 MongoDB

docker run --name some-mongo -d mongo:tag

其中,some-mongo 表示 Docker 运行的这个 MongoDB 容器的名称,可以自行更改,不能与已有的容器名称重复(正在运行的或退出的都不行)。tag 表示你需要使用的 mongo 镜像的版本号(如 3.1),不传则表示默认使用 latest 的最新版本。

示例:

docker run --name mongo -d mongo

3、使用参数运行 MongoDB

一般运行时都会使用某些参数来对容器进行配置,下面是一个运行实例的示例:

(1) 在 Docker 宿主机创建一个数据目录

这个步骤的作用在 Docker 宿主机创建一个目录以将 Mongo 容器中的数据存储目录映射到宿主机,这样可以保证 Mongo 容器删除而数据仍可保留的效果,如果你不在乎数据的持久化,这个步骤不用做,-v 的参数也可以不传。

$ mkdir -p ~/mongodb/data/db

(2) 完整的运行 MongoDB

以下是完整运行 MongoDB 的命令:

$ docker run -d \
--name mongo \
--restart always \
-v /mongodb/data/db:/data/db \
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=mongoadmin \
-e MONGO_INITDB_ROOT_PASSWORD=secret \
mongo --serviceExecutor adaptive 

示例:

$ mongodb docker run -d \
--name mongo \
--restart always \
-v ~/mongodb/data/db:/data/db \
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=mongoadmin \
-e MONGO_INITDB_ROOT_PASSWORD=secret \
mongo --serviceExecutor adaptive 
e08f2babcd83d59ed5c138ece51c0ba7e95cd1bfea2fcfe0cb814ae9217163c2

注:

(1) -d 表示在后台运行 mongo 容器,可以不传,但你的 ssh 会话结束该进程就没了,所以是建议使用的。

(2) --name mongo 中的 mongo 表示该容器的名称,可自行定义更改,可以不传但建议传。

(3) --restart always 表示设置该容器当 docker 服务重启时自动启动,可以不传此但建议传。

(4) -v ~/mongodb/data/db:/data/db 表示将 docker 容器中的数据目录映射到宿主机目录,可以不传但建议传。

(5) -e MONGO_INITDB_ROOT_USERNAME=mongoadmin 表示通过环境变量参数设置 MongoDB 的 admin 用户,可以不传但建议传。

(6) -e MONGO_INITDB_ROOT_USERNAME= secret 表示通过环境变量参数设置 MongoDB 的 admin 用户密码,可以不传但建议传,secret 可算定义。

(7) mongo --serviceExecutor adaptive mongo 指的是 mongo 镜像。后面跟的是 mongod 的命令行参数,可参考附录的官方文档关于 mongod 的的命令行参数。

运行验证

1、查看进程

$ docker ps | grep mongo 
e08f2babcd83        mongo                "docker-entrypoint.s…"   26 seconds ago      Up 25 seconds         0.0.0.0:27017->27017/tcp             mongo

2、查看 logs 日志

$ docker logs mongo
{"t":{"$date":"2020-10-23T17:01:46.904+00:00"},"s":"I",  "c":"FTDC",     "id":20625,   "ctx":"initandlisten","msg":"Initializing full-time diagnostic data capture","attr":{"dataDirectory":"/data/db/diagnostic.data"}}
{"t":{"$date":"2020-10-23T17:01:46.906+00:00"},"s":"I",  "c":"EXECUTOR", "id":22951,   "ctx":"initandlisten","msg":"No thread count configured for executor. Using number of cores / 2","attr":{"threadCount":2}}
{"t":{"$date":"2020-10-23T17:01:46.906+00:00"},"s":"I",  "c":"EXECUTOR", "id":22957,   "ctx":"worker-1","msg":"Started new database worker thread","attr":{"id":1}}
{"t":{"$date":"2020-10-23T17:01:46.906+00:00"},"s":"I",  "c":"EXECUTOR", "id":22957,   "ctx":"worker-2","msg":"Started new database worker thread","attr":{"id":2}}
{"t":{"$date":"2020-10-23T17:01:46.907+00:00"},"s":"I",  "c":"NETWORK",  "id":23015,   "ctx":"listener","msg":"Listening on","attr":{"address":"/tmp/mongodb-27017.sock"}}
{"t":{"$date":"2020-10-23T17:01:46.907+00:00"},"s":"I",  "c":"NETWORK",  "id":23015,   "ctx":"listener","msg":"Listening on","attr":{"address":"0.0.0.0"}}
{"t":{"$date":"2020-10-23T17:01:46.907+00:00"},"s":"I",  "c":"NETWORK",  "id":23016,   "ctx":"listener","msg":"Waiting for connections","attr":{"port":27017,"ssl":"off"}}

3、简单连接

如下示例:

$ docker exec -it mongo mongo -u mongoadmin -p secret --authenticationDatabase admin
MongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("2b57b6b8-6061-48a2-8768-4af3c3282533") }
MongoDB server version: 4.4.1
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
-        https://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forums
-        https://community.mongodb.com
---
The server generated these startup warnings when booting: 
-  2020-10-23T17:01:46.117+00:00: The adaptive service executor implementation is deprecated, please leave --serviceExecutor unspecified
-  2020-10-23T17:01:46.118+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
---
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
-
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
-
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
> 

附录

MongoDB 官方网站:

https://www.mongodb.com/

mongo docker hub 地址:

https://hub.docker.com/_/mongo

mongodb 企业版 docker 安装文档:

https://docs.mongodb.com/manual/tutorial/install-mongodb-enterprise-with-docker/

mongod 参数官方文档:

https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption-mongod-serviceexecutor

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注