Docker 安装 MongoDB

Siona

Docker 安装 MongoDB

1. 拉取 Redis 镜像

$ docker pull mongo:4.0.13
docker run -itd --name mongo -v /home/docker-volume/mongodb/data:/data/db -p 27017:27017 mongo:4.0.13 --auth


docker run -itd --name mongodb -p 27017:27017 -v /home/docker-volume/mongodb/data:/data/db -v /docker-software/mongodb/log:/data/log -d mongo --auth
docker run -itd --name mongodb --restart=always -p 27017:27017 -v /home/docker-volume/mongodb/data:/data/db -v /home/docker_volume/mongodb/backup:/data/backup -v /home/docker_volume/mongodb/conf:/data/configdb mongo --auth


# 执行最终版
docker run -itd --name mongodb --restart=always -p 27017:27017 -v /home/docker-volume/mongodb/data:/data/db mongo:4.0.13


-v: 将宿主机的 /home/docker-volume/mongodb/data 映射到容器的 /data/db 目录, 将数据持久化到宿主机,以防止删除容器后,容器内的数据丢失

–auth:需要密码才能访问容器服务

$ docker exec -it some-mongo bash
$ docker logs some-mongo
[root@qinyue data]# docker logs mongodb
2024-07-02T14:41:43.881+0000 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2024-07-02T14:41:43.887+0000 I CONTROL  [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=a18ca6ad5eda
2024-07-02T14:41:43.887+0000 I CONTROL  [initandlisten] db version v4.0.13
2024-07-02T14:41:43.887+0000 I CONTROL  [initandlisten] git version: bda366f0b0e432ca143bc41da54d8732bd8d03c0
2024-07-02T14:41:43.887+0000 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
2024-07-02T14:41:43.887+0000 I CONTROL  [initandlisten] allocator: tcmalloc
2024-07-02T14:41:43.887+0000 I CONTROL  [initandlisten] modules: none
2024-07-02T14:41:43.887+0000 I CONTROL  [initandlisten] build environment:
2024-07-02T14:41:43.887+0000 I CONTROL  [initandlisten]     distmod: ubuntu1604
2024-07-02T14:41:43.887+0000 I CONTROL  [initandlisten]     distarch: x86_64
2024-07-02T14:41:43.887+0000 I CONTROL  [initandlisten]     target_arch: x86_64
2024-07-02T14:41:43.887+0000 I CONTROL  [initandlisten] options: { net: { bindIpAll: true } }
2024-07-02T14:41:43.888+0000 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=7356M,cache_overflow=(file_max=0M),session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
2024-07-02T14:41:45.107+0000 I STORAGE  [initandlisten] WiredTiger message [1719931305:107755][1:0x7f8c34540a80], txn-recover: Set global recovery timestamp: 0
2024-07-02T14:41:45.111+0000 I RECOVERY [initandlisten] WiredTiger recoveryTimestamp. Ts: Timestamp(0, 0)
2024-07-02T14:41:45.116+0000 I CONTROL  [initandlisten] 
2024-07-02T14:41:45.116+0000 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2024-07-02T14:41:45.116+0000 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2024-07-02T14:41:45.116+0000 I CONTROL  [initandlisten] 
2024-07-02T14:41:45.117+0000 I CONTROL  [initandlisten] 
2024-07-02T14:41:45.117+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2024-07-02T14:41:45.117+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2024-07-02T14:41:45.117+0000 I CONTROL  [initandlisten] 
2024-07-02T14:41:45.117+0000 I STORAGE  [initandlisten] createCollection: admin.system.version with provided UUID: 1a730434-862c-49af-90b1-7f1f6dd93f61
2024-07-02T14:41:45.122+0000 I COMMAND  [initandlisten] setting featureCompatibilityVersion to 4.0
2024-07-02T14:41:45.125+0000 I STORAGE  [initandlisten] createCollection: local.startup_log with generated UUID: 544f6ecd-6f18-4927-bdbc-884a876c4605
2024-07-02T14:41:45.130+0000 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
2024-07-02T14:41:45.132+0000 I NETWORK  [initandlisten] waiting for connections on port 27017
2024-07-02T14:41:45.132+0000 I CONTROL  [LogicalSessionCacheReap] Sessions collection is not set up; waiting until next sessions reap interval: config.system.sessions does not exist
2024-07-02T14:41:45.132+0000 I STORAGE  [LogicalSessionCacheRefresh] createCollection: config.system.sessions with generated UUID: 597732bc-1afd-419c-be2c-99f83b611ae5
2024-07-02T14:41:45.144+0000 I INDEX    [LogicalSessionCacheRefresh] build index on: config.system.sessions properties: { v: 2, key: { lastUse: 1 }, name: "lsidTTLIndex", ns: "config.system.sessions", expireAfterSeconds: 1800 }
2024-07-02T14:41:45.144+0000 I INDEX    [LogicalSessionCacheRefresh] 	 building index using bulk method; build may temporarily use up to 500 megabytes of RAM
2024-07-02T14:41:45.145+0000 I INDEX    [LogicalSessionCacheRefresh] build index done.  scanned 0 total records. 0 secs

docker exec -it redis bash

[root@qinyue conf]# docker images
REPOSITORY               TAG       IMAGE ID       CREATED       SIZE
redis                    latest    7614ae9453d1   2 years ago   113MB
rabbitmq                 latest    d445c0adc9a5   2 years ago   220MB
mongo                    latest    dfda7a2cf273   2 years ago   693MB
portainer/portainer-ce   latest    0df02179156a   2 years ago   273MB
portainer/portainer      latest    580c0e4e98b0   3 years ago   79.1MB
mongo                    4.0.13    0712bd00d695   4 years ago   416MB


[root@qinyue conf]# docker ps -a
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS                                                                                                                             NAMES
ea645e458f9b   mongo                           "docker-entrypoint.s…"   8 seconds ago    Up 5 seconds    0.0.0.0:27017->27017/tcp, :::27017->27017/tcp                                                                                     mongodb
19f47b8ea1b0   redis                           "docker-entrypoint.s…"   10 minutes ago   Up 10 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp                                                                                         redis
a6801588f1aa   redis:latest                    "docker-entrypoint.s…"   22 hours ago     Up 22 hours     6379/tcp                                                                                                                          redis-test
b5e249962b7e   portainer/portainer-ce:latest   "/portainer"             22 hours ago     Up 22 hours     0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp   portainer

# 停止容器
docker stop [容器 id]
docker stop ea645e458f9b

# 删除容器
docker rm [容器 id]
docker rm ea645e458f9b

# 删除镜像
docker rmi mongo

# 启动容器,如果不是最新版本,比如加 tag,否则会 pull 镜像最新版本。
[root@qinyue conf]# docker run -itd --name mongodb --restart=always \
  -p 27017:27017 \
  -v /home/docker-volume/mongodb/data:/data/db \
  mongo:4.0.13

设置数据库用户名、密码

# 创建mongo容器后,进入容器
docker exec -it mongodb /bin/bash

# 进入mongo shell
mongo  6.0版本之前使用
mongosh 6.0版本之后使用

注:如果出现:bash: mongo: command not found

# 可直接执行
docker exec -it mongodb mongo
# 进入admin数据库
use admin

# 创建超级权限root角色的用户,或者userAdminAnyDatabase 等角色权限比较大的用户,我创建的是拥有超级权限root角色的用户root
# 用户名:root,密码:root,角色:root,数据库:admin
db.createUser({user:'root',pwd:'mongodb123456',roles:[{role:'root',db:'admin'}]})
db.createUser({user:'root',pwd:'123456',roles:[{role:'root',db:'admin'}]})

6.0之后创建成功返回的成功标识为:{ok:1}

# 认证登录db.auth('用户名','密码'),打印1则代表认证通过
db.auth('root','mongodb123456')
db.auth('root','123456')

[root@qinyue data]# docker exec -it mongodb bash
root@a18ca6ad5eda:/# mongo
MongoDB shell version v4.0.13
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("d368a44f-479f-4a3c-860e-87be66fecd24") }
MongoDB server version: 4.0.13
Server has startup warnings: 
2024-07-02T14:41:45.116+0000 I CONTROL  [initandlisten] 
2024-07-02T14:41:45.116+0000 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2024-07-02T14:41:45.116+0000 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2024-07-02T14:41:45.116+0000 I CONTROL  [initandlisten] 
2024-07-02T14:41:45.117+0000 I CONTROL  [initandlisten] 
2024-07-02T14:41:45.117+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2024-07-02T14:41:45.117+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2024-07-02T14:41:45.117+0000 I CONTROL  [initandlisten] 
---
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()
---

> use admin
switched to db admin
> db.createUser({user:'root',pwd:'123456',roles:[{role:'root',db:'admin'}]})
Successfully added user: {
	"user" : "root",
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}
> db.auth('root','123456')
1
> exit


参考文章open in new window

参考文章open in new window

参考文章open in new window

注意 --auth 是错的,导致容器一直重启。

Last Updated 8/31/2024, 8:59:17 AM