杂记 | 使用Docker安装并配置MongoDB以支持事务(单副本,并解决了证书文件错误的问题)

文章目录

  • 00 安装前的准备
  • 01 创建Docker Compose文件
  • 02 设置证书文件
  • 03 启动MongoDB
  • 04 初始化副本集和创建用户
  • 05 验证安装


00 安装前的准备

在开始之前,确保已经安装了Docker,本文基于Docker Compose进行示范,没有装Docker Compose也可将其中的docker-compose命令转换为docker run命令执行。

01 创建Docker Compose文件

首先,新建一个名为mongo的目录,并在其中创建一个名为docker-compose.yml的文件,并写入以下内容:

version: '3.8'
services:
  mongo:
    image: mongo:latest
    container_name: mongo
    command: --auth --bind_ip_all --replSet rs0 --keyFile /data/mongodb/keyFile
    ports:
      - "27017:27017"
    volumes:
      - ./data:/data/db
      - ./conf:/data/configdb
      - ./backup:/data/backup
      - ./keyFile:/data/mongodb/keyFile

这个配置会启动一个MongoDB容器,使用最新的MongoDB镜像,并将容器命名为mongo

命令解释:

  1. command: --auth --bind_ip_all --replSet rs0 --keyFile /data/mongodb/keyFile: 这是传递给MongoDB服务器的命令行参数。

    • --auth: 开启身份验证。
    • --bind_ip_all: 允许MongoDB绑定到服务器上的所有IP地址。
    • --replSet rs0: 初始化一个名为rs0的副本集。
    • --keyFile /data/mongodb/keyFile: 指定用于副本集成员之间身份验证的密钥文件路径。
  2. ports:: 这部分定义了容器和宿主机之间的端口映射。

    • "27017:27017": 将容器的27017端口映射到宿主机的27017端口。MongoDB默认使用27017端口。
  3. volumes:: 这部分定义了宿主机和容器之间的数据卷映射,用于数据持久化和配置管理。

    • ./data:/data/db: 将宿主机当前目录下的data文件夹映射到容器的/data/db路径,用于存储MongoDB的数据文件。
    • ./conf:/data/configdb: 将宿主机的conf文件夹映射到容器的/data/configdb路径,通常用于存放MongoDB的配置文件。
    • ./backup:/data/backup: 将宿主机的backup文件夹映射到容器的/data/backup路径,用于存储备份文件。
    • ./keyFile:/data/mongodb/keyFile: 将宿主机的keyFile文件映射到容器的/data/mongodb/keyFile路径,这是副本集认证所需的密钥文件。

02 设置证书文件

为了安全性和配置副本集,需要创建一个证书文件。在存放docker-compose.yml的mongo目录下,运行以下命令来生成证书文件:

# 生成一个756字节的自签名证书
openssl rand -base64 756 > ./keyFile
# 赋予该证书400权限
chmod 400 ./keyFile
# 更改文件的所有者和群组
chown 999:999 ./keyFile

MongoDB是以用户ID 999运行的,更改keyFile的所有者和群组为UID和GID 999,以确保MongoDB进程能够访问该文件。

必需要完成权限设置和访问组设置,否则MongoDB无法正常启动。

03 启动MongoDB

使用以下命令来启动MongoDB服务:

# 拉取镜像
docker-compose pull
# 启动容器
docker-compose up -d
# 停止容器
# docker-compose down

启动完成后,该目录:
在这里插入图片描述

04 初始化副本集和创建用户

进入到MongoDB容器并初始化副本集:

# 进入容器 这里的mongo是容器名称 mongosh是脚本命令
docker exec -it mongo mongosh
# 进入容器后 执行初始化(带 > 符号说明是在容器内操作,并非命令的一部分)
> rs.initiate()

然后,创建管理员用户:

# 切换数据库
> use admin
# 创建管理员用户
> db.createUser({user:'admin', pwd:'admin123456', roles:[{role: 'userAdminAnyDatabase', db:'admin'}]});
# 用户认证登录
> db.auth("admin", "admin123456")

接下来,切换到printing账户,并创建一个具有读写权限的用户:

# 切换数据库
> use printing
# 创建一个用户
> db.createUser({user: "lily", pwd: "lily1997", roles: [{role:"readWrite", db: "printing"}]});
# 先退出
> exit

05 验证安装

最后,验证用户是否可以成功连接并认证:

# 进入容器
docker exec -it mongo mongosh
# 切换数据库
> use printing
# 用户认证登录
> db.auth("lily", "lily1997")

通过以上步骤,我们成功在Linux服务器上使用Docker安装并配置了MongoDB。开启了单副本,支持事务。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode算法题解(动态规划)|LeetCode198. 打家劫舍、LeetCode213. 打家劫舍 II、LeetCode337. 打家劫舍 III

一、LeetCode198. 打家劫舍 题目链接:198. 打家劫舍 题目描述: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的…

docker安装Sentinel zipkin

文章目录 引言I Sentinel安装1.1 运行容器1.2 DOCKERFILE 参考1.3 pom 依赖1.4 .yml配置(整合springboot)II 资源保护2.1 Feign整合Sentinel2.2 CommonExceptionAdvice:限流异常处理类III zipkin引言 消息服务和请求第三方服务可不配置Sentinel。 I Sentinel安装 Sentinel …

Fabric:搭建自定义网络

Hyperledger Fabric: V2.5.4 写在最前 从本篇博客开始,将陆续介绍使用Fabric搭建自定义网络及部署执行链码的过程。本篇主要介绍如何搭建网络。   由于前文在安装Fabric的时候,已经将目录fabric-samples/bin加入到了环境变量PATH中,所以正文…

Java 的第二十章:多线程

创建线程 继承Thread 类 Thread 类时 java.lang 包中的一个类,从类中实例化的对象代表线程,程序员启动一个新线程需要建立 Thread 实例。 Thread 对象需要一个任务来执行,任务是指线程在启动时执行的工作,start() 方法启动线程&am…

如何在自定义数据集上训练 YOLOv8 实例分割模型

在本文中,我们将介绍微调 YOLOv8-seg 预训练模型的过程,以提高其在特定目标类别上的准确性。Ikomia API简化了计算机视觉工作流的开发过程,允许轻松尝试不同的参数以达到最佳结果。 使用 Ikomia API 入门 通过 Ikomia API,我们只需…

C++ : 初始化列表 类对象作为类成员

传统方式初始化 C 提供了初始化列表语法,用来初始化属性 初始化列表 语法: 构造函数():属性1(值1), 属性2(值2)... {} class Person { public://传统方式初始化 Person(int a, int b, int c) {m_A a;m_B b;m_C c…

生成工具集合

文章目录 前言一、SVG 波浪图片生成器二、背景图片生成器三、布局/形状分隔线四、Neumorphism五、动画按钮六、开发工具七、Interactions(图片轮播)八、CSS Gradient (渐变属性)九、获取波浪十、平滑阴影十一、CSS Clip-path Make…

图像重定向Image Retarget

1、什么是图像重定向? 图像重定向旨在调整图像的尺寸和比例,以适应不同的显示设备或布局要求。 它可以通过添加或删除像素来改变图像的宽度和高度,同时保持图像的内容和结构的相对比例。 这种技术可以通过保持图像的关键特征和结构来最大程度…

Java-多线程基本知识学习总结

多线程 前言一、线程的创建1、继承Thread类2、实现Runnable接口 二、线程的生命周期三、操作线程的方法1、线程的休眠2、线程的加入3、线程的礼让4、线程的优先级 四、线程同步End 前言 Java是支持多线程的编程语言,所谓多线程就是程序能够同时完成多种操作。 计算…

Linux中执行java命令报错:cannot execute binary file: Exec format error

网上很多文章 都是说操作系统和JDK,32位和64位不兼容问题 当你非常确定你的操作系统是64位,并且JDK也是64位的时候 或者非常确定你的操作系统是32位,并且JDK也是32位的时候 怎么办? 使用以下命令,查看你的操作系统…

IDEA插件推荐

今天给大家推荐一款IDEA插件:Apipost-Helper-2.0,支持三大功能:写完代码IDEA内一键生成API文档;写完代码IDEA内一键调试;生成API目录树,双击即可快速定位API定义的代码…非常好用!而且完全免费&…

MySQL进阶-InnoDB引擎

✨作者:猫十二懿 ❤️‍🔥账号:CSDN 、掘金 、语雀 、Github 🎉公众号:猫十二懿 一、InnoDB 逻辑存储引擎 InnoDB的逻辑存储结构如下图所示: 大小关系:表空间(Tablespace&#xff0…

消息队列MQ

文章目录 同步通讯和异步通讯什么是MQ?一.RabbitMQ概述二.SpringAMQP1.Work Queue 工作队列2.发布订阅-Fanout Exchange3.发布订阅-DirectExchange4.发布订阅-TopicExchange 3.消息转换器 同步通讯和异步通讯 其实在之前的JAVASE中就已经在线程一章中接触过了同步和异步的概念…

实战:登录接口测试用例举例

以下是一些可能的登录接口测试用例(使用Python编写的): 1. 测试正常情况下的登录接口: # 请求URL url "https://example.com/api/login" # 请求参数 username "testuser" password "testpassword&q…

数据治理框架和成熟度模型

数据治理成熟度模型 一个企业的数据治理能力越高,所享受到数据治理带来的价值也会越多,如增加收入、减少成本、降低风险等。于是,很多企业想要准确地评估本公司的数据治理能力,可以利用数据治理成熟度模型方法,包括 D…

摄影网站的技术 SEO:提示和最佳实践

摄影就是要给人留下良好的第一印象。如果你想在竞争中领先,摄影师的SEO是您可以采用的最佳营销方法之一。 我们都曾有过这样的经历:你建立了一个漂亮的作品集网站来吸引更多的业务。网站上线并在社交媒体上推广后,您就可以坐等了。网站访问量…

堆的应用(堆排序、Top-K问题)

文章目录 1 堆排序2 Top-K问题 1 堆排序 堆排序是一种基于二叉堆(通常使用数组实现)的排序算法。 它的基本思想是利用堆这种数据结构的性质,通过建立一个堆(大堆或小堆),使得堆的根节点是所有节点中的最大值…

牛客 算法题 golang语言实现

题目 HJ101 输入整型数组和排序标识,对其元素按照升序或降序进行排序 描述 输入整型数组和排序标识,对其元素按照升序或降序进行排序数据范围: 1 ≤ � ≤ 10001≤n≤1000 ,元素大小满足 0 ≤ � &#…

提升企业网络安全的得力助手——EventLog Analyzer网络日志管理

在当今数字化时代,企业的网络安全问题变得尤为重要。为了更好地应对日益增多的威胁和安全漏洞,企业需要一种高效的网络日志管理工具,EventLog Analyzer便是其中一款卓越的解决方案。 EventLog Analyzer EventLog Analyzer是一款综合性的网络…

探索短剧市场的商机:打造短视频平台的全方位指南

目前短剧市场蓬勃发展,上半年备案数远超电视剧,彰显了短剧小程序市场潜力巨大,商业价值巨大。用户对短小精悍娱乐内容的需求不断增加,而新兴市场中有限的短剧小程序正好能够迎合这一需求。 搭建短视频平台的关键步骤: …