Docker 实战教程:使用 docker-compose 管理 MongoDB

Docker

今天我学习了如何使用 docker-compose 管理 Docker 上的 MongoDB,在这里和大家分享一下。

docker + docker-compose

我刚刚利用 docker 与 docker-compose 结合简化我的全栈业余项目。使用 docker-compose 来安装 MongoDB,Redis,ElasticSearch 这些容器很简单,只需要在需要时下载镜像,然后在不需要它们时删除容器即可。

待办事项清单

  1. 下载 MongoDB 镜像;
  2. 创建文件用于初始化经过身份验证的数据库和用户
  3. 编写 docker-compose 文件
  4. 使用创建的凭据登录 MongoDB

下载 MongoDB 镜像

通过执行以下命令提取最新的 MongoDB 映像:

$ docker pull mongo:latest

通过执行 $docker images 来显示拉取的镜像,以确保拉取成功:

创建文件用于初始化经过身份验证的数据库和用户

创建一个文件,命名为 init-mongo.js 或其他任何文件,确保它是一个Javascript 文件即可:

写入 docker-compose 文件

创建一个名为 docker-compose.yml 的文件以设置 docker-compose 应用栈。这是我们当前的目录结构

docker-compose.yml 内容:

参数说明

  • version 填写 docker-compose 文件格式的版本,您可以更改为最新版本
  • database 第 3 行上的 database仅仅是服务名称,您可以根据需要更改
  • image 必须是 mongo,因为您想从 mongo 镜像中创建一个容器
  • container_name 是您的容器的名称,它是可选的
  • environment 是将在 mongo 容器上使用的变量
  • MONGO_INITDB_DATABASE 数据库名称要与 init-mongo.js 相同
  • MONGO_INITDB_ROOT_USERNAME 填写 root 用户名
  • MONGO_INITDB_ROOT_PASSWORD 填写 root 密码
  • volumes 定义存放容器的文件/文件夹
  • ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo-js:ro 表示要将 init-mongo.js 复制到 /docker-entrypoint-initdb.d/ 目录下,并设置为只读文件。 /docker-entrypoint-initdb.d 是一个已经在mongo 容器中创建的文件夹,用于初始化数据库。
  • ./mongo-volume:/data/db 设置本地文件夹 mongo-volume 作为 MongoDB 的持久化数据存储文件夹;
  • ports 用于定义要公开的端口,在本例中,使用默认的 MongoDB 端口 27017直到27019

执行

现在运行 $ docker-compose up 或 $ docker-compose up -d 在后台运行容器。

打开另一个终端以登录到该容器。键入 $ docker container ls以查看我们正在运行的容器。

使用容器名称登录容器:

$ docker exec -it <container-name> bash

使用创建的用户和数据库登录 MongoDB:

$ mongo -u <your username> -p <your password> --authenticationDatabase <your database name>### OR ###$ mongo -u <your username> --authenticationDatabase <your database name>

结语

至此已创建 MongoDB 容器、MongoDB 用户、超级用户和数据库。现在可以使用以下链接连接到数据库:

mongodb://YourUsername:YourPasswordHere@127.0.0.1:27017/your-database-name

感谢您的阅读!

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://medium.com/faun/managing-mongodb...

译文地址:https://learnku.com/server/t/37106

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
讨论数量: 1
不温柔

我没用root账户,发现/docker-entrypoint-initdb.d/*.js的初始化文件不能有效执行,不知道为什么

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!