使用 docker 快速搭建开发环境的 mongodb 服务

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
性能测试 PTS,5000VUM额度
函数计算FC,每月15万CU 3个月
简介: 本指南介绍如何使用 Docker 和 Docker Compose 部署 MongoDB 和 Mongo Express。首先,通过 Docker 命令分别启动 MongoDB(镜像 `mongo:7.0.14`)和 Mongo Express(镜像 `mongo-express:1.0.2-20-alpine3.19`),并配置环境变量确保两者能正确连接。接着,提供了一个 `docker-compose.yaml` 文件示例,包含 MongoDB 数据卷、健康检查及服务依赖配置,简化多容器管理。

此处使用镜像信息:

  • mongo:7.0.14
  • mongo-express:1.0.2-20-alpine3.19

本地安装好 docker 环境后,执行如下命令:

  1. 启动 MongoDB 容器
docker run -d \
  --name mongo \
  -p 27017:27017 \
  -e MONGO_INITDB_ROOT_USERNAME=admin \
  -e MONGO_INITDB_ROOT_PASSWORD=admin \
  mongo:7.0.14
  • 命令解释:
docker run:启动一个新的容器。
-d:后台运行容器(detached 模式)。
--name mongo:指定容器的名字为 mongo。
-p 27017:27017:将主机的 27017 端口映射到容器的 27017 端口,这是 MongoDB 默认的端口。
-e MONGO_INITDB_ROOT_USERNAME=admin:设置环境变量 MONGO_INITDB_ROOT_USERNAME,用于初始化 MongoDB 的管理员用户名为 admin。
-e MONGO_INITDB_ROOT_PASSWORD=admin:设置环境变量 MONGO_INITDB_ROOT_PASSWORD,用于初始化 MongoDB 的管理员密码为 admin。
mongo:7.0.14:使用 MongoDB 的官方镜像版本 7.0.14。
  1. 启动 Mongo Express 容器
docker run -d \
  --name mongo-express \
  -p 8081:8081 \
  -e ME_CONFIG_MONGODB_ADMINUSERNAME=admin \
  -e ME_CONFIG_MONGODB_ADMINPASSWORD=admin \
  -e ME_CONFIG_MONGODB_SERVER=127.0.0.1 \
  -e ME_CONFIG_MONGODB_PORT=27017 \
  mongo-express:1.0.2-20-alpine3.19
  • 命令解释:
docker run:启动一个新的容器。
-d:后台运行容器(detached 模式)。
--name mongo-express:指定容器的名字为 mongo-express。
-p 8081:8081:将主机的 8081 端口映射到容器的 8081 端口,这是 Mongo Express 默认的 Web 界面端口。
-e ME_CONFIG_MONGODB_ADMINUSERNAME=admin:设置环境变量 ME_CONFIG_MONGODB_ADMINUSERNAME,用于连接 MongoDB 的管理员用户名为 admin。
-e ME_CONFIG_MONGODB_ADMINPASSWORD=admin:设置环境变量 ME_CONFIG_MONGODB_ADMINPASSWORD,用于连接 MongoDB 的管理员密码为 admin。
-e ME_CONFIG_MONGODB_SERVER=127.0.0.1:设置环境变量 ME_CONFIG_MONGODB_SERVER,指定 MongoDB 服务器的地址为 127.0.0.1(即本机)。
-e ME_CONFIG_MONGODB_PORT=27017:设置环境变量 ME_CONFIG_MONGODB_PORT,指定 MongoDB 服务器的端口为 27017。
mongo-express:1.0.2-20-alpine3.19:使用 Mongo Express 的官方镜像版本 1.0.2-20-alpine3.19。

这两条命令分别启动了一个 MongoDB 数据库容器和一个 Mongo Express 管理界面容器,并且配置了必要的环境变量以确保它们能够正确连接和工作。MongoDB 容器监听 27017 端口,而 Mongo Express 容器则通过浏览器访问 8081 端口来管理 MongoDB

为了更加方便部署,我们还可以将上述 Docker 命令转换为 Docker ComposeYAML 文件可以更方便地管理和运行多个容器。

以下是详细的 Docker Compose 信息,新建文件 mongo-stack.yaml 文件内容如下:

version: '3.8'

services:
  mongo:
    image: mongo:7.0.14
    container_name: mongo
    ports:
      - "27017:27017"
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: mgadmin
      MONGO_INITDB_ROOT_PASSWORD: mgadmin
    volumes:
      - /app/data/mongo:/data/db
    healthcheck:
      test: ["CMD", "mongo", "--quiet", "--eval", "db.runCommand({serverStatus:1}).ok"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 30s  # 增加启动期时间

  mongo-express:
    image: mongo-express:1.0.2-20-alpine3.19
    container_name: mongo-express
    ports:
      - "8081:8081"
    restart: always
    environment:
      ME_CONFIG_OPTIONS_EDITORTHEME: 3024-night
      ME_CONFIG_BASICAUTH_USERNAME: mgxpress
      ME_CONFIG_BASICAUTH_PASSWORD: mgxpress
      ME_CONFIG_MONGODB_ADMINUSERNAME: mgadmin
      ME_CONFIG_MONGODB_ADMINPASSWORD: mgadmin
      ME_CONFIG_MONGODB_SERVER: mongo
      ME_CONFIG_MONGODB_PORT: 27017
    depends_on:
      mongo:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8081"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 30s

volumes:
  mongo-data:

新增 MongoDB 数据卷:

`volumes`:将主机的 `/app/data/mongo` 目录挂载到容器的 `/data/db` 目录,用于持久化 `MongoDB` 数据。

注意:确保本机存在目录 ./app/data/mongo ,如果不存在该目录,预先手动创建一下目录,并分配对应的读写权限;

  • 新增 MongoDB 健康检查:
test: ["CMD", "mongo", "--eval", "db.adminCommand('ping')"]:使用 MongoDB 的 ping 命令来检查数据库是否响应。
interval: 10s:每 10 秒执行一次健康检查。
timeout: 5s:如果健康检查命令在 5 秒内没有完成,则认为健康检查失败。
retries: 3:如果连续 3 次健康检查失败,则认为容器不健康。
start_period: 30s:在容器启动后的前 30 秒内,即使健康检查失败也不会重启容器。
  • 新增 MongoDB Express 健康检查:
test: ["CMD", "curl", "-f", "http://mongo:8081"]:使用 curl 命令检查 Mongo Express 的 Web 界面是否响应。
interval: 10s:每 10 秒执行一次健康检查。
timeout: 5s:如果健康检查命令在 5 秒内没有完成,则认为健康检查失败。
retries: 3:如果连续 3 次健康检查失败,则认为容器不健康。
start_period: 30s:在容器启动后的前 30 秒内,即使健康检查失败也不会重启容器。
  • 容器启动依赖条件:
depends_on:指定 mongo-express 依赖于 mongo 服务,并且只有在 mongo 服务健康时才会启动 mongo-express。
  • yaml 文件使用方法:
1、将上述内容保存到一个名为 docker-compose.yml 的文件中。
2、在终端中导航到该文件所在的目录。

3、运行以下命令启动服务:
docker compose -f ./mongo-stack.yaml up -d

4、服务启动后,可以通过浏览器访问 `http://localhost:8081` 来访问 `Mongo Express` 管理界面。

5、卸载 `compose` 执行如下命令:
docker compose -f ./mongo-stack.yaml down

这样配置后,MongoDBMongo Express 将作为一个组合服务运行,并且通过健康检查确保它们能够正常工作。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
3月前
|
Linux Docker 容器
Linux 中停止 Docker 服务报 warning 导致无法彻底停止问题如何解决?
在 Linux 系统中,停止 Docker 服务时遇到警告无法彻底停止的问题,可以通过系统管理工具停止服务、强制终止相关进程、检查系统资源和依赖关系、以及重置 Docker 环境来解决。通过以上步骤,能够有效地排查和解决 Docker 服务停止不彻底的问题,确保系统的稳定运行。
232 19
|
6月前
|
负载均衡 应用服务中间件 网络安全
docker swarm添加更多的服务
【10月更文挑战第16天】
80 6
|
6月前
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
119 5
|
6月前
|
负载均衡 网络协议 关系型数据库
docker swarm 使用网络启动服务
【10月更文挑战第15天】
106 4
|
6月前
|
Docker 容器
docker swarm 在服务中使用网络
【10月更文挑战第14天】
138 2
|
5月前
|
JavaScript 开发者 Docker
深入理解Docker容器化技术,打造高效开发环境
深入理解Docker容器化技术,打造高效开发环境
|
6月前
|
存储 NoSQL MongoDB
基于阿里云数据库MongoDB版,微财数科“又快又稳”服务超7000万客户
选择MongoDB主要基于其灵活的数据模型、高性能、高可用性、可扩展性、安全性和强大的分析能力。
|
6月前
|
安全 网络安全 数据安全/隐私保护
docker服务未启动
【10月更文挑战第2天】
331 3
|
6月前
|
Linux iOS开发 Docker
docker服务未启动
【10月更文挑战第3天】
249 1
|
6月前
|
存储 NoSQL MongoDB
docker安装Mongodb
这篇文章详细说明了如何使用Docker安装MongoDB,包括拉取镜像、创建并运行容器、数据持久化存储以及访问容器内的MongoDB服务的具体步骤。
583 1
下一篇
oss创建bucket