暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

通过Docker安装MongoDB

原创 简单 2022-09-16
2267

在系列博客中讲了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/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论