在系列博客中讲了Docker和开源数据库基本操作的之后,在这篇文章中,我将演示如何用Docker进行MongoDB安装。
第一篇是Peter Zaitsev写的 Installing MySQL with Docker 。
在开始之前,有必要引用Peter的文章来进行警告。
“下面的介绍是为了让一个测试实例快速而简单地运行;而不是希望你把这些用于生产部署。
另外,对Docker的全面描述不是本文的目的,但我假设你对Docker有一定的了解,而且你已经安装并配置了Docker。
Docker可以快速部署独立的MongoDB容器。如果你正在寻找快速部署副本集和分片,我建议你看看mlaunch工具。
Peter在他的文章中提到,MySQL有两个不同的 "官方 "存储库,而对于MongoDB,情况也是一样的:一个由MongoDB官方维护的存储库,另一个由Docker维护。我是根据Docker维护的版本库来写这篇文章的。
安装最新版本的MongoDB
下面代码是从Docker资源库启动最新MongoDB版本容器的一个例子:
docker run --name mongodb_dockerhub \ -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=secret \ -d mongo:latest
现在,如果你想在容器创建后立即检查它的状态:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fdef23c0f32a mongo:latest "docker-entrypoint..." 4 seconds ago Up 4 seconds 27017/tcp mongodb_dockerhub
连接Docker容器中的MongoDB服务器
容器安装完毕并运行后,你会发现除了docker二进制文件外,不需要额外的步骤或安装依赖。现在可以访问容器内的MongoDB shell,并执行一个基本命令,如 “show dbs”。
docker exec -it mongodb_dockerhub mongo -u admin -p secret
MongoDB shell version v4.2.5
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("89c3fb4a-a8ed-4724-8363-09d65024e458") }
MongoDB server version: 4.2.5
Welcome to the MongoDB shell.
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
> exit
bye
也可以使用主机mongo shell连接到容器化的MongoDB。在docker ps输出中,容器id有一个字段告知其端口映射,然后就是使用该端口的简单连接。
在下面的例子中,我们连接到mongodb_dockerhub36。它在本地启动并运行在27017端口,但被映射到主机27018端口。
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 60ffc759fab9 mongo:3.6 "docker-entrypoint..." 20 seconds ago Up 19 seconds 0.0.0.0:27018->27017/tcp mongodb_dockerhub36
因此,mongo shell连接字符串将针对外部IP和端口27018执行。
mongo admin -u admin --host 172.16.0.10 --port 27018 -psecret
在Docker容器中管理MongoDB
下面的命令将展示管理MongoDB容器时的基本管理操作。
-
启动容器并检查状态。
docker start mongodb_dockerhub docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fdef23c0f32a mongo:latest "docker-entrypoint..." 47 minutes ago Up 2 seconds 27017/tcp mongodb_dockerhub -
关闭容器并检查状态。
docker stop mongodb_dockerhub docker ps CONTAINER ID IMAGE COMMAND -
查看MongoDB日志。
docker logs mongodb_dockerhub ... about to fork child process, waiting until server is ready for connections. forked process: 25 2020-04-10T14:04:49.808+0000 I CONTROL [main] ***** SERVER RESTARTED ***** 2020-04-10T14:04:49.812+0000 I CONTROL [main] Automatically disabling TLS 1.0, to f ...
在Docker容器中向MongoDB服务器传递命令行参数
也可以在启动MongoDB容器时定义实例的参数。在下面的例子中,我将展示如何设置WiredTiger缓存。
docker run --name mongodb_dockerhub \ -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=secret \ -d mongo:latest --wiredTigerCacheSizeGB 1.0
在Docker中运行不同版本的MongoDB服务器
另一种可能性是让两个版本的MongoDB容器同时运行,但在不同的版本下。下面的代码将展示这种方案。
-
启动4.0版本容器。
docker run --name mongodb_dockerhub40 \ -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=secret \ -d mongo:4.0 -
启动3.6版本容器。
docker run --name mongodb_dockerhub36 \ -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=secret \ -d mongo:3.6 -
检查容器状态。
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e9f480497f2d mongo:3.6 "docker-entrypoint..." 32 seconds ago Up 32 seconds 27017/tcp mongodb_dockerhub36 3a799f8a907c mongo:4.0 "docker-entrypoint..." 41 seconds ago Up 41 seconds 27017/tcp mongodb_dockerhub40如果由于某些原因,你需要两个容器同时运行,并从外部访问它们,那么就使用不同的端口映射。在下面的例子中,两个MongoDB的容器都部署在本地的27017端口上,尽管如此,我为每个容器设置了不同的外部端口映射。
-
MongoDB 4.0映射27017端口。
docker run --name mongodb_dockerhub40 \ -p 27017:27017 \ -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=secret \ -d mongo:4.0 -
MongoDB 3.6映射27018端口。
docker run --name mongodb_dockerhub36 \ -p 27018:27017 \ -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=secret \ -d mongo:3.6 -
同时检查容器状态。
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 78a79e5606ae mongo:4.0 "docker-entrypoint..." 3 seconds ago Up 2 seconds 0.0.0.0:27017->27017/tcp mongodb_dockerhub40 60ffc759fab9 mongo:3.6 "docker-entrypoint..." 20 seconds ago Up 19 seconds 0.0.0.0:27018->27017/tcp mongodb_dockerhub36
在Docker的MongoDB Hub页面上有很多其他的细节,你会发现MongoDB Docker部署中可以使用更多的选项。快去尝试吧!
原文标题:Installing MongoDB With Docker
原文作者:Rafael Galinari
原文地址:https://www.percona.com/blog/installing-mongodb-with-docker/




