mongo

s390x/mongo Docker 镜像

MongoDB文档数据库提供高可用性和轻松的可扩展性。

1 次收藏下载次数: 0状态:社区镜像维护者:s390x仓库类型:镜像最近更新:5 年前
下载命令
点击查看

注意:这是 https://hub.docker.com/_/mongo 的s390x架构构建的"按架构"仓库——更多信息,请参见官方镜像文档中的 https://github.com/docker-library/official-images#architectures-other-than-amd64 和官方镜像FAQ中的 https://github.com/docker-library/faq#an-images-source-changed-in-git-now-what。

快速参考

  • 维护者:
    https://github.com/docker-library/mongo

  • 获取帮助:
    https://dockr.ly/comm-slack、Server Fault、https://unix.stackexchange.com/help/on-topic 或 https://stackoverflow.com/help/on-topic

支持的标签和相应的Dockerfile链接

警告:此镜像在s390x架构上不受支持

快速参考(续)

  • 问题提交地址:
    https://github.com/docker-library/mongo/issues?q=

  • 支持的架构:(https://github.com/docker-library/official-images#architectures-other-than-amd64)
    https://hub.docker.com/r/amd64/mongo/、https://hub.docker.com/r/arm64v8/mongo/、https://hub.docker.com/r/winamd64/mongo/

  • 已发布镜像工件详情:
    https://github.com/docker-library/repo-info/blob/master/repos/mongo (https://github.com/docker-library/repo-info/commits/master/repos/mongo)
    (镜像元数据、传输大小等)

  • 镜像更新:
    https://github.com/docker-library/official-images/issues?q=label%3Alibrary%2Fmongo
    https://github.com/docker-library/official-images/blob/master/library/mongo (https://github.com/docker-library/official-images/commits/master/library/mongo)

  • 此描述的来源:
    https://github.com/docker-library/docs/tree/master/mongo (https://github.com/docker-library/docs/commits/master/mongo)

什么是MongoDB?

MongoDB是一个免费开源的跨平台面向文档的数据库程序。作为NoSQL数据库程序,MongoDB使用带有模式的类JSON文档。MongoDB由MongoDB公司开发,并根据https://www.mongodb.com/licensing/server-side-public-license和Apache许可证的组合发布。

最初由软件公司10gen(现MongoDB公司)于2007年10月开发,作为计划中的平台即服务产品的组件,该公司于2009年转向开源开发模式,10gen提供商业支持和其他服务。从那时起,MongoDB已被许多主要网站和服务采用作为后端软件,包括MetLife、巴克莱、ADP、UPS、维亚康姆和《纽约时报》等。MongoDB是最受欢迎的NoSQL数据库系统。

***.org/wiki/MongoDB

安全性

默认情况下,Mongo的配置不需要访问认证,即使是管理员用户。如果计划将Mongo实例暴露到互联网,强烈建议设置root用户名和密码。有关说明,请参见下面的“MONGO_INITDB_ROOT_USERNAME、MONGO_INITDB_ROOT_PASSWORD”部分,更完整的内容请参见https://www.mongodb.com/docs/manual/security/。

如何使用此镜像

启动mongo服务器实例

console
$ docker run --name some-mongo -d s390x/mongo:tag

...其中some-mongo是您要分配给容器的名称,tag是指定MongoDB版本的标签。有关相关标签,请参见上面的列表。

从另一个Docker容器连接到MongoDB

镜像中的MongoDB服务器监听标准MongoDB端口27017,因此通过Docker网络连接与连接到远程mongod相同。以下示例启动另一个MongoDB容器实例,并针对上面示例中的原始MongoDB容器运行mongosh(4.x版本使用mongo)命令行客户端,允许您对数据库实例执行MongoDB语句:

console
$ docker run -it --network some-network --rm s390x/mongo mongosh --host some-mongo test

...其中some-mongo是原始mongo容器的名称。

...通过https://github.com/docker/compose

mongo的compose.yaml示例:

yaml
services:
  mongo:
    image: docker.xuanyuan.run/mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example

  mongo-express:
    image: docker.xuanyuan.run/mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/
      ME_CONFIG_BASICAUTH_ENABLED: true
      ME_CONFIG_BASICAUTH_USERNAME: mongoexpressuser
      ME_CONFIG_BASICAUTH_PASSWORD: mongoexpresspass

运行docker compose up,等待完全初始化后,访问http://localhost:8081或http://host-ip:8081(视情况而定)。

容器shell访问和查看MongoDB日志

docker exec命令允许您在Docker容器内运行命令。以下命令将为您提供s390x/mongo容器内的bash shell:

console
$ docker exec -it some-mongo bash

MongoDB服务器日志可通过Docker的容器日志查看:

console
$ docker logs some-mongo

配置

有关使用和配置MongoDB(如副本集和分片)的信息,请参见https://www.mongodb.com/docs/manual/administration/configuration/。

无需配置文件自定义配置

大多数MongoDB配置选项可以通过mongod的标志设置。镜像的入口点将其参数传递给mongod。下面的示例通过docker run启用MongoDBhttps://www.mongodb.com/docs/manual/reference/program/mongod/#profiler-options。

console
$ docker run --name some-mongo -d s390x/mongo --profile 1

也可以通过compose.yaml文件实现:

yaml
services:
  mongo:
    image: docker.xuanyuan.run/s390x/mongo
    command: --profile 1

要查看所有可能的选项,请查看MongoDB手册中关于https://www.mongodb.com/docs/manual/reference/program/mongod/的内容或查看`mongod`的`--help`输出:

console
$ docker run -it --rm s390x/mongo --help

使用自定义MongoDB配置文件

对于更复杂的配置设置,仍可以使用MongoDB配置文件。mongod默认不读取配置文件,因此需要指定--config选项和配置文件的路径。创建自定义配置文件,并通过创建自定义DockerfileFROM s390x/mongo或将其从主机挂载到容器中,将其放入容器。有关https://www.mongodb.com/docs/manual/reference/configuration-options/选项的完整列表,请参见MongoDB手册。

例如,/my/custom/mongod.conf是自定义配置文件的路径。然后按以下方式启动MongoDB容器:

console
$ docker run --name some-mongo -v /my/custom:/etc/mongo -d s390x/mongo --config /etc/mongo/mongod.conf

环境变量

启动mongo镜像时,可以通过在docker run命令行上传递一个或多个环境变量来调整MongoDB实例的初始化。请注意,如果启动容器时数据目录已包含数据库,则以下变量均不会产生任何影响:容器启动时始终不会修改任何预先存在的数据库。

MONGO_INITDB_ROOT_USERNAME、MONGO_INITDB_ROOT_PASSWORD

这些变量结合使用,创建新用户并设置该用户的密码。此用户在adminhttps://www.mongodb.com/docs/manual/core/security-users/#authentication-database中创建,并被授予https://www.mongodb.com/docs/manual/reference/built-in-roles/#mongodb-authrole-root,这是https://www.mongodb.com/docs/manual/reference/built-in-roles/#superuser-roles。

以下示例使用这两个变量创建MongoDB实例,然后使用mongosh cli(4.x版本使用mongo)连接到admin认证数据库。

console
$ docker run -d --network some-network --name some-mongo \
	-e MONGO_INITDB_ROOT_USERNAME=mongoadmin \
	-e MONGO_INITDB_ROOT_PASSWORD=secret \
	s390x/mongo

$ docker run -it --rm --network some-network s390x/mongo \
	mongosh --host some-mongo \
		-u mongoadmin \
		-p secret \
		--authenticationDatabase admin \
		some-db
> db.getName();
some-db

创建用户需要这两个变量。如果同时存在这两个变量,则MongoDB将启用认证启动(mongod --auth)。

MongoDB中的认证相当复杂,因此更复杂的用户设置明确留给用户通过/docker-entrypoint-initdb.d/完成(更多详细信息请参见下面的“初始化新实例”和“认证”部分)。

MONGO_INITDB_DATABASE

此变量允许您指定用于/docker-entrypoint-initdb.d/*.js中的创建脚本的数据库名称(参见下面的“初始化新实例”)。MongoDB从根本上设计为“首次使用时创建”,因此如果不使用JavaScript文件插入数据,则不会创建数据库。

Docker Secrets

作为通过环境变量传递敏感信息的替代方法,可以将_FILE附加到前面列出的环境变量,使初始化脚本从容器中存在的文件加载这些变量的值。特别是,这可用于从存储在/run/secrets/<secret_name>文件中的Docker机密加载密码。例如:

console
$ docker run --name some-mongo -e MONGO_INITDB_ROOT_PASSWORD_FILE=/run/secrets/mongo-root -d s390x/mongo

目前,仅支持MONGO_INITDB_ROOT_USERNAME和MONGO_INITDB_ROOT_PASSWORD。

初始化新实例

首次启动容器时,它将执行/docker-entrypoint-initdb.d中找到的扩展名为.sh和.js的文件。文件将按字母顺序执行。.js文件将由mongosh(6以下版本使用mongo)使用MONGO_INITDB_DATABASE变量指定的数据库执行(如果存在),否则使用test数据库。您也可以在.js脚本中切换数据库。

认证

如上所述,MongoDB中的认证相当复杂(尽管默认情况下禁用)。有关MongoDB如何处理认证的详细信息,请参见相关上游文档:

  • https://www.mongodb.com/docs/manual/reference/program/mongod/#std-option-mongod.--auth
  • https://www.mongodb.com/docs/manual/core/authentication/
  • https://www.mongodb.com/docs/manual/core/authorization/
  • https://www.mongodb.com/docs/manual/reference/built-in-roles/
  • https://www.mongodb.com/docs/manual/tutorial/enable-authentication/

除了上面记录的/docker-entrypoint-initdb.d行为(这是为较简单部署配置认证用户的简单方法)外,此镜像还支持MONGO_INITDB_ROOT_USERNAME和MONGO_INITDB_ROOT_PASSWORD,用于在adminhttps://www.mongodb.com/docs/manual/core/security-users/#authentication-database中创建具有https://www.mongodb.com/docs/manual/reference/built-in-roles/#mongodb-authrole-root的简单用户,如上面“环境变量”部分所述。

注意事项

数据存储位置

重要说明:有多种方法存储Docker容器中运行的应用程序使用的数据。我们鼓励mongo镜像的用户熟悉可用选项,包括:

  • 让Docker通过使用其自己的内部卷管理将数据库文件写入主机系统的磁盘来管理数据库数据的存储https://docs.docker.com/storage/volumes/。这是默认选项,对用户来说简单且相当透明。缺点是对于直接在主机系统(即容器外部)运行的工具和应用程序,可能难以找到这些文件。
  • 在主机系统上(容器外部)创建数据目录,并https://docs.docker.com/storage/bind-mounts/。这将数据库文件放在主机系统上的已知位置,并使主机系统上的工具和应用程序易于访问这些文件。缺点是用户需要确保目录存在,并且主机系统上的目录权限和其他安全机制设置正确。

警告(Windows和OS X):在Windows和OS X上运行基于Linux的MongoDB镜像时,用于在主机系统和Docker容器之间共享的文件系统与MongoDB使用的内存映射文件不兼容(参见https://www.mongodb.com/docs/manual/administration/production-notes/#fsync---on-directories和相关https://jira.mongodb.org/browse/SERVER-8600)。这意味着无法运行将数据目录映射到主机的MongoDB容器。要在容器重启之间持久化数据,我们建议改用本地命名卷(参见`docker volume create`)。或者,您可以在Windows上使用基于Windows的镜像。

Docker文档是了解不同存储选项和变体的良好起点,有多个博客和论坛帖子讨论并提供这方面的建议。我们在这里仅展示上述后一种选项的基本过程:

  1. 在主机系统上的合适卷上创建数据目录,例如/my/own/datadir。

  2. 像这样启动mongo容器:

    console
    $ docker run --name some-mongo -v /my/own/datadir:/data/db -d s390x/mongo
    

命令的-v /my/own/datadir:/data/db部分将基础主机系统的/my/own/datadir目录挂载为容器内的/data/db,MongoDB默认会在其中写入数据文件。

此镜像还为/data/configdb定义了一个卷https://www.mongodb.com/docs/manual/reference/program/mongod/#std-option-mongod.--configsvr。

创建数据库转储

大多数常规工具都可以工作,尽管在某些情况下它们的使用可能有点复杂,以确保它们能够访问mongod服务器。确保这一点的简单方法是使用docker exec并从同一容器运行工具,类似于以下内容:

console
$ docker exec some-mongo sh -c 'exec mongodump -d <database_name> --archive' > /some/path/on/your/host/all-collections.archive

许可证

查看此镜像中包含的软件的https://github.com/mongodb/mongo/blob/6ea81c883e7297be99884185c908c7ece385caf8/README#L89-L95。

需要注意的是,2018年10月16日之后的所有版本从AGPL更改为SSPLv1。

与所有Docker镜像一样,这些镜像可能还包含其他可能受其他许可证约束的软件(例如基础发行版中的Bash等,以及主要软件的任何直接或间接依赖项)。

一些能够自动检测到的其他许可证信息可能在https://github.com/docker-library/repo-info/tree/master/repos/mongo中找到。

至于任何预构建镜像的使用,镜像用户有责任确保对该镜像的任何使用符合其中包含的所有软件的相关许可证。

镜像拉取方式

您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

轩辕镜像加速拉取命令点我查看更多 mongo 镜像标签

docker pull docker.xuanyuan.run/s390x/mongo:<标签>

DockerHub 原生拉取命令

docker pull s390x/mongo:<标签>
专业版 · 高速稳定拉取镜像
50GB 仅 ¥8/年
高速镜像下载在线技术支持专业版保障服务可用付费会员免广告