此处使用镜像信息:
mongo:7.0.14
mongo-express:1.0.2-20-alpine3.19
本地安装好 docker
环境后,执行如下命令:
- 启动
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。
- 启动
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 Compose
的 YAML
文件可以更方便地管理和运行多个容器。
以下是详细的 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
这样配置后,MongoDB
和 Mongo Express
将作为一个组合服务运行,并且通过健康检查确保它们能够正常工作。