Docker Compose介绍及安装使用MongoDB数据库详解

在现代容器化应用部署中,Docker Compose是一种非常实用的工具,它允许我们通过一个docker-compose.yml文件来定义和运行多容器应用程序。然而,除了Docker之外,Podman也提供了类似的工具——Podman Compose,它允许我们在Podman环境中使用类似于Docker Compose的功能。本文将介绍如何使用Podman Compose来管理MongoDB数据库,并详细讲解如何使用init-mongo.js文件初始化数据库。

Podman Compose简介

Podman Compose是一个与Docker Compose类似的工具,旨在为Podman提供多容器应用编排的能力。Podman是一个无守护进程的容器引擎,它遵循容器运行时的标准,提供了更加简洁和安全的容器管理方式。

Podman Compose的工作原理

Podman Compose读取docker-compose.yml文件(虽然它名为docker-compose,但在Podman Compose中可以兼容使用这个文件格式来定义服务、网络和卷等信息),然后根据文件中的定义在Podman环境中创建和管理容器、网络等资源。

Podman Compose的优势

  1. 与现有的基于docker-compose.yml文件的工作流程兼容,方便那些已经熟悉Docker Compose的用户过渡到Podman环境。
  2. 利用Podman的特性,如无守护进程运行容器,提高了容器的安全性和资源利用效率。

Podman Compose常用命令

  1. 启动服务

    • 命令:podman-compose -f ‘docker-compose.yml’ up -d
    • 功能:以守护进程模式(-d选项)启动在docker-compose.yml文件中定义的所有服务。这类似于Docker Compose中的up -d命令。
  2. 停止并移除服务

    • 命令:podman-compose -f ‘docker-compose.yml’ down
    • 功能:停止正在运行的服务,并移除相关的容器、网络(如果是由Podman Compose创建的)和卷(如果是由Podman Compose创建且没有设置为外部卷)。这与Docker Compose中的down命令功能类似。
  3. 查看服务状态

    • 命令:podman-compose -f ‘docker-compose.yml’ ps
    • 功能:列出在docker-compose.yml文件中定义的所有服务的容器状态,包括容器名称、镜像、状态等信息。
  4. 查看日志

    • 命令:podman-compose -f ‘docker-compose.yml’ logs [service_name]
    • 功能:查看服务的容器日志。如果指定了service_name,则只查看该服务的日志;如果不指定,则查看所有服务的日志。

安装 Docker Compose

如果尚未安装Docker Compose,请先安装Docker Compose环境。

  • 对于Ubuntu系统,可以使用以下命令安装Docker Compose:
  sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# 给予可执行权限sudo chmod +x /usr/local/bin/docker-compose# 检验Docker Compose是否安装成功docker-compose --version

Podman Compose 安装

在使用 Podman Compose 之前,确保你的系统已经安装了 Podman。如果尚未安装 Podman,可以参考官方文档进行安装。

对于 Ubuntu 系统

  1. 安装 Podman:
sudo apt-get update
sudo apt-get install -y podman podman-compose
  1. 验证 Podman 和 Podman Compose 是否安装成功:
podman --version
podman-compose --version

如果安装成功,你应该会看到类似如下的输出:

podman version 3.4.4
podman-compose version 1.0.3

使用Podman Compose配置MongoDB

以下是一个基本的docker-compose.yml文件示例,展示了如何配置MongoDB服务:

version: '3.8'services:mongodb:image: mongo:latestcontainer_name: mongodbenvironment:- MONGO_INITDB_ROOT_USERNAME=admin- MONGO_INITDB_ROOT_PASSWORD=admin123volumes:- mongodb_data:/data/db- mongodb_logs:/var/log/mongodb- ./mongod.conf:/etc/mongod.conf- ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.jshealthcheck:test: ["CMD", "mongo", "--eval", "db.adminCommand('ping')"]interval: 10stimeout: 5sretries: 5networks:- dco-netvolumes:mongodb_data:mongodb_logs:networks:dco-net:

(一)关键配置解释

  • 环境变量:设置MongoDB的初始化用户名和密码。
  • 卷挂载:
    • mongodb_datamongodb_logs 用于持久化数据和日志。
    • ./mongod.conf 用于自定义MongoDB配置。
    • ./init-mongo.js 用于初始化数据库。
  • 健康检查:确保MongoDB服务正常运行,通过定期执行db.adminCommand('ping')命令来检查。

初始化MongoDB数据库

init-mongo.js文件允许你在MongoDB容器启动时执行初始化脚本。这对于创建初始数据、用户或设置非常有用。

(一)示例init-mongo.js

db.auth('admin', 'admin123');db = db.getSiblingDB('mydatabase');db.createCollection('users');db.users.insertMany([{ name: 'Alice', email: 'alice@example.com' },{ name: 'Bob', email: 'bob@example.com' }
]);print('Initialized mydatabase with users collection');

(二)使用步骤

  1. 创建init-mongo.js文件:将上述脚本保存为init-mongo.js并放置在项目目录中。
  2. 挂载文件:确保在docker-compose.yml文件中将init-mongo.js挂载到/docker-entrypoint-initdb.d/目录。
  3. 启动服务:运行podman-compose -f 'docker-compose.yml' up -d启动MongoDB服务。

MongoDB容器启动时,会自动执行/docker-entrypoint-initdb.d/目录下的所有JavaScript文件,从而初始化数据库。

应用依赖mongodb的使用方式

如果一个应用依赖mongodb容器,以下给出一个完整的docker-compose.yml使用示例:

version: '3.8'services:mongodb:image: mongo:latestcontainer_name: mongodbenvironment:- MONGO_INITDB_ROOT_USERNAME=admin- MONGO_INITDB_ROOT_PASSWORD=admin123volumes:- mongodb_data:/data/db- mongodb_logs:/var/log/mongodb- ./mongod.conf:/etc/mongod.conf- ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.jshealthcheck:test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]interval: 10stimeout: 5sretries: 5networks:- dco-netgodco:build:context: .dockerfile: Dockerfilecontainer_name: godcoports:- "7000:8080"volumes:- ./etc:/app/etc- ./static:/app/staticnetworks:- dco-netdepends_on:mongodb:condition: service_healthycommand: ["./godco", "-f", "./etc/godco-api.yaml"] volumes:mongodb_data:mongodb_logs:networks:dco-net:

init-mongo.js:

db = db.getSiblingDB('admin');
print("Starting database initialization...");
// 创建管理员用户
db.createUser({user: "yang",pwd: "yang123", // 请使用更安全的密码方式,例如环境变量或密钥管理服务roles: [ { role: "root", db: "admin" } ]}
);db = db.getSiblingDB('atomdco');
print("Switched to database: " + db.getName());
db.createCollection('mycollection'); // 创建集合
db.mycollection.insertMany([{ name: "Alice" }, { name: "Bob" }]);
db.createUser({user: "test1",pwd: "111111",roles: [{ role: "readWrite", db: "atomdco" }]
});print("database initialization success");

使用命令:

podman-compose -f 'docker-compose.yml' down
podman-compose -f 'docker-compose.yml' up -d
#查看日志
docker logs container_name_or_id
#如何知道容器启动成功了?
podman ps
#或者
podman-compose -f 'docker-compose.yml' logs

则会自动启动应用,先启动mongodb容器,再启动应用容器。并且mongodb数据库的初始化,init-mongo.js脚本会自动执行,完成创建用户名和密码等操作。如何查看脚本执行成功了?可以使用以下命令,进入mongodb容器查看。

 #进入容器podman-compose exec mongodb /bin/bash#进入之后,使用客户端连接:
mongosh "mongodb://admin:admin123@localhost:27017"
#或者
mongosh --username admin --password admin123
#

在这里插入图片描述
如果想在mongodb的容器中,执行一段js脚本呢?也是有办法的,可以写一个如下的shell脚本,加载执行js脚本。

#!/bin/bash# JavaScript 脚本路径
SCRIPT_PATH="./init-mongo.js"# 检查 mongosh 是否安装
if ! command -v mongosh &> /dev/null
thenecho "Error: mongosh could not be found. Please install it first."exit 1
fi# 执行 JavaScript 脚本
mongosh --host localhost --port 27017 --username $MONGO_INITDB_ROOT_USERNAME --password $MONGO_INITDB_ROOT_PASSWORD --authenticationDatabase admin <<EOF
load("$SCRIPT_PATH");
EOF# 检查脚本执行结果
if [ $? -eq 0 ]; thenecho "JavaScript script executed successfully."
elseecho "Failed to execute JavaScript script."exit 1
fi

结论

通过Podman Compose,你可以轻松管理和部署复杂的多容器应用。结合init-mongo.js文件,你可以自动化数据库初始化过程,确保每次部署都有一致的环境。Podman Compose提供了一种在Podman环境下类似于Docker Compose的功能,方便用户进行容器化应用的编排和管理。

参考资料

  • Podman Compose官方文档
  • MongoDB Docker Image文档

通过这些步骤,你可以高效地使用Podman Compose来管理你的MongoDB数据库,并确保每次部署都有一致且初始化的数据环境。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/69683.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

netcore openTelemetry+prometheus+grafana

一、netcore项目 二、openTelemetry 三、prometheus 四、grafana添加Dashborad aspire/src/Grafana/dashboards at main dotnet/aspire GitHub 导入&#xff1a;aspnetcore.json和aspnetcore-endpoint.json 效果&#xff1a;

团结引擎“虚拟阴影贴图”能力解析

在团结引擎 1.4.0 版本中&#xff0c;我们发布了重磅功能&#xff1a;虚拟阴影贴图&#xff08;Virtual Shadow Maps&#xff0c;VSM&#xff09;&#xff0c;全面升级开发体验&#xff0c;为开发者提供更加逼真的光影效果。 虚拟阴影贴图介绍 虚拟阴影贴图&#xff08;Virtua…

docker.service job docker.service/start failed with result ‘dependency‘

Bug:docker.service job docker.service/start failed with result ‘dependency’ 运行以下命令&#xff1a; sudo systemctl start docker.service出现错误&#xff1a; docker.service job docker.service/start failed with result dependency解决办法&#xff1a; 给系…

docker 逃逸突破边界

免责声明 本博客文章仅供教育和研究目的使用。本文中提到的所有信息和技术均基于公开来源和合法获取的知识。本文不鼓励或支持任何非法活动&#xff0c;包括但不限于未经授权访问计算机系统、网络或数据。 作者对于读者使用本文中的信息所导致的任何直接或间接后果不承担任何…

SaaS+AI应用架构:业务场景、智能体、大模型、知识库、传统工具系统

SaaSAI应用架构&#xff1a;业务场景、智能体、大模型、知识库、传统工具系统 大家好&#xff0c;我是汤师爷~ 在SaaS与AI应用的演进过程中&#xff0c;合理的架构设计至关重要。本节将详细介绍其五个核心层次&#xff1a; 业务场景层&#xff1a;发现和确定业务场景智能体层…

使用 Visual Studio Code (VS Code) 开发 Python 图形界面程序

安装Python、VS Code Documentation for Visual Studio Code Python Releases for Windows | Python.org 更新pip >python.exe -m pip install --upgrade pip Requirement already satisfied: pip in c:\users\xxx\appdata\local\programs\python\python312\lib\site-pa…

运放放大器

1 运放是什么 1.1 运算放大器&#xff0c;常用于做信号处理。如:信号放大、滤波、积分、微分、整流、甚至可以用来做电路主控等等。其功能非常强大 1.2 运放的重要特性 虚短 &#xff08;前提是要有负反馈&#xff09; 1.2.1 虚短的概念是指运放在正常工作过程中&#xff0c…

RDK新一代模型转换可视化工具!!!

作者&#xff1a;SkyXZ CSDN&#xff1a;SkyXZ&#xff5e;-CSDN博客 博客园&#xff1a;SkyXZ - 博客园 之前在使用的RDK X3的时候&#xff0c;吴诺老师wunuo发布了新一代量化转换工具链使用教程&#xff0c;这个工具真的非常的方便&#xff0c;能非常快速的完成X3上模型的量化…

玩转适配器模式

文章目录 解决方案现实的举例适用场景实现方式适配器模式优缺点优点:缺点:适配器模式可比上一篇的工厂模式好理解多了,工厂模式要具有抽象的思维。这个适配器模式,正如字面意思,就是要去适配某一件物品。 假如你正在开发一款股票市场监测程序, 它会从不同来源下载 XML 格…

LIMO:上海交大的工作 “少即是多” LLM 推理

25年2月来自上海交大、SII 和 GAIR 的论文“LIMO: Less is More for Reasoning”。 一个挑战是在大语言模型&#xff08;LLM&#xff09;中的复杂推理。虽然传统观点认为复杂的推理任务需要大量的训练数据&#xff08;通常超过 100,000 个示例&#xff09;&#xff0c;但本文展…

渗透利器工具:Burp Suite 联动 XRAY 图形化工具.(主动扫描+被动扫描)

Burp Suite 联动 XRAY 图形化工具.&#xff08;主动扫描被动扫描&#xff09; Burp Suite 和 Xray 联合使用&#xff0c;能够将 Burp 的强大流量拦截与修改功能&#xff0c;与 Xray 的高效漏洞检测能力相结合&#xff0c;实现更全面、高效的网络安全测试&#xff0c;同时提升漏…

企业数据集成案例:吉客云销售渠道到MySQL

测试-查询销售渠道信息-dange&#xff1a;吉客云数据集成到MySQL的技术案例分享 在企业的数据管理过程中&#xff0c;如何高效、可靠地实现不同系统之间的数据对接是一个关键问题。本次我们将分享一个具体的技术案例——通过轻易云数据集成平台&#xff0c;将吉客云中的销售渠…

windows生成SSL的PFX格式证书

生成crt证书: 安装openssl winget install -e --id FireDaemon.OpenSSL 生成cert openssl req -x509 -newkey rsa:2048 -keyout private.key -out certificate.crt -days 365 -nodes -subj "/CN=localhost" 转换pfx openssl pkcs12 -export -out certificate.pfx…

win10 llamafactory模型微调相关① || Ollama运行微调模型

目录 微调相关 1.微调结果评估 2.模型下载到本地 导出转换&#xff0c;Ollama运行 1.模型转换&#xff08;非常好的教程&#xff01;&#xff09; 2.Ollama 加载GGUF模型文件 微调相关 1.微调结果评估 【06】LLaMA-Factory微调大模型——微调模型评估_llamafactory评估-C…

如何在Vue中实现事件处理

在Vue中&#xff0c;事件处理是一个核心概念&#xff0c;它让我们能够响应用户的操作&#xff0c;比如点击按钮、输入文本等。Vue提供了一个简洁而强大的方式来绑定事件和处理事件。本文将介绍如何在Vue中实现事件处理&#xff0c;覆盖事件绑定、事件修饰符以及事件处理函数等内…

国产编辑器EverEdit - 各种符号显示的效果

1 符号显示详解 打开主菜单查看 -> 符号显示可以展开如下相关显示选项菜单 1.1 各符号显示开关说明 1.1.1 当前行 打开该选项时&#xff0c;光标所在行会有淡淡的背景色&#xff0c;如下图所示&#xff1a; 如果用户不喜欢当前行的背景色&#xff0c;可以自行调整&#…

【深度学习】Java DL4J 2024年度技术总结

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

Spring基于文心一言API使用的大模型

有时做项目我们可能会遇到要在项目中对接AI大模型 本篇文章是对使用文心一言大模型的使用总结 前置任务 在百度智能云开放平台中注册成为开发者 百度智能云开放平台 进入百度智能云官网进行登录&#xff0c;点击立即体验 点击千帆大模型平台 向下滑动&#xff0c;进入到模型…

内容中台赋能人工智能技术提升业务创新能力

内容概要 在当今快速变化的市场环境中&#xff0c;企业需要不断寻求创新以保持竞争力。内容中台作为一种新型的内容管理架构&#xff0c;能够极大地提升企业在内容创建、管理和分发方面的效率。通过与人工智能技术的深度融合&#xff0c;企业能够将海量的数据和信息转化为有价…

大语言模型需要的可观测性数据的关联方式

可观测性数据的关联方式及其优缺点 随着现代分布式架构和微服务的普及&#xff0c;可观测性&#xff08;Observability&#xff09;已经成为确保系统健康、排查故障、优化性能的重要组成部分。有效的可观测性数据关联方式不仅能够帮助我们实时监控系统的运行状态&#xff0c;还…