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

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
云原生网关 MSE Higress,422元/月
简介: 本指南介绍如何使用 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 将作为一个组合服务运行,并且通过健康检查确保它们能够正常工作。

目录
相关文章
|
11月前
|
Linux Docker 容器
Linux 中停止 Docker 服务报 warning 导致无法彻底停止问题如何解决?
在 Linux 系统中,停止 Docker 服务时遇到警告无法彻底停止的问题,可以通过系统管理工具停止服务、强制终止相关进程、检查系统资源和依赖关系、以及重置 Docker 环境来解决。通过以上步骤,能够有效地排查和解决 Docker 服务停止不彻底的问题,确保系统的稳定运行。
738 19
|
负载均衡 应用服务中间件 网络安全
docker swarm添加更多的服务
【10月更文挑战第16天】
194 6
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
299 5
|
负载均衡 网络协议 关系型数据库
docker swarm 使用网络启动服务
【10月更文挑战第15天】
282 4
|
Docker 容器
docker swarm 在服务中使用网络
【10月更文挑战第14天】
319 2
|
存储 NoSQL MongoDB
基于阿里云数据库MongoDB版,微财数科“又快又稳”服务超7000万客户
选择MongoDB主要基于其灵活的数据模型、高性能、高可用性、可扩展性、安全性和强大的分析能力。
|
存储 Linux Docker
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
关于如何在CentOS 7.6上安装Docker、介绍Docker存储引擎以及服务进程关系的实战案例。
741 3
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
|
安全 网络安全 数据安全/隐私保护
docker服务未启动
【10月更文挑战第2天】
955 3
|
Linux iOS开发 Docker
docker服务未启动
【10月更文挑战第3天】
536 1
|
存储 NoSQL MongoDB
docker安装Mongodb
这篇文章详细说明了如何使用Docker安装MongoDB,包括拉取镜像、创建并运行容器、数据持久化存储以及访问容器内的MongoDB服务的具体步骤。
1183 1