(学习到实践)docker下的MongoDB运行

栏目: 数据库 · 发布时间: 4年前

内容简介:密码登录+容器数据共享,主从复制添加配置文件夹,组织容器命令。从测试容器中匹配搜索得到 mongod.conf.orig,设置可以启动,网上查找配置项反不能启动,原因是配置是yaml格式!好像听说过。百度查询得到:官方

目标需求:

密码登录+容器数据共享,主从复制

1.配置启动

添加配置文件夹,组织容器命令。

a.官方“未提供”相关信息

从测试容器中匹配搜索得到 mongod.conf.orig,设置可以启动,网上查找配置项反不能启动,原因是配置是yaml格式!好像听说过。百度查询得到:官方 配置说明 ,网站卡得出奇。

b.启动配置

[]:~/tmp/dk/mongodb# docker run --rm --name mg1 -d mongo
#默认数据目录
root@199665dc0d08:/# ls /data/db -lh
total 268K
-rw------- 1 mongodb mongodb   45 Jun 29 23:39 WiredTiger
-rw------- 1 mongodb mongodb   21 Jun 29 23:39 WiredTiger.lock
... ...
# mongod.conf 删除了一些注释选项
# Where and how to store data.
storage:
  #数据库数据存放目录
  dbPath: /data/db
  #启用日志文件,默认启用
  journal:
    enabled: true

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  #数据库日志存放目录?
  path: /var/log/mongodb/mongod.log
  #静默模式,过滤掉一些无用的日志信息
  quiet: true

# network interfaces
net:
  port: 27017
  bindIp: 192.168.0.4

security:
  登录认证
  authorization: "enable"

测试过程中主要错误有:

#对应命令 docker run -itd --name mg2 \
    -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=123456 \
    -v /root/tmp/dk/mongodb/mongod.conf:/etc/mongod.conf \
    -v /root/tmp/dk/mongodb/mongod.log:/var/log/mongod.log \
    -v /root/tmp/dk/mongodb/data:/data/db \
    -d mongo --auth --config /etc/mongod.conf
Error saving history file: FileOpenFailed: Unable to open() file /home/mongodb/.dbshell: Unknown error
#对应命令 ...-d mongo [mongod ]--config (/etc/mongod.conf|空白46)
[main] ***** SERVER RESTARTED *****
[main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
killing process with pid: 30

这里mongod是处理参数的,没有不行,去掉d也不行,类似mysqld,结果正常的也就-d mongo mongod --auth结尾的。

其他还有无故错误可能是.conf配置的文件路径有问题,如:从上面得到的默认日志路径上级文件夹不存在(??bug),官方说明不清不楚,解决问题以减少配置为主,减少启动参数(逐个测试增加)。

c.运行容器

“意外的”官方 参考地址 ,多次尝试命令(最终):

[]:~/tmp/dk/mongodb#  docker stop mg2 && docker rm mg2 && rm -rf /root/tmp/dk/mongodb/data/* && \
docker run -itd --name mg2 \
    -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=123456 \
    -v /root/tmp/dk/mongodb/initdb:/home/mongodb/ \
    -v /root/tmp/dk/mongodb/mongod.conf:/etc/mongod.conf \
    -v /root/tmp/dk/mongodb/data:/data/db \
    -d mongo mongod --auth

无法运行,带--config项时run后是exited状态,修改配置没反应(日志无报错、退出)。遂去除启动--config项。但这一切其实只是初始化而已。

后来测试发现是日志看多了,...-d mongo mongod --config /etc/mongod.conf结尾启动正常。

2.运行处理

a.加密数据、主从复制

这里只做简单配置(还有密钥文件认证),注意yaml双引号,添加:

security:
  enableEncryption: true
  #开启时默认如下
  #encryptionCipherMode: "AES256-CBC"

replication:
  oplogSizeMB: 20  #同步复制的日志大小设置,单位MB
  #All hosts in the replica set must have the same set name.
  replSetName: "repl"
  #secondaryIndexPrefetch: "all"
  #enableMajorityReadConcern: ture
sharding:
  #shardsvr:a shard. The instance starts on port 27018 by default
  #configsvr:a config server. The instance starts on port 27019 by default.  
  clusterRole: "shardsvr" #shardsvr|configsvr选一
  #archiveMovedChunks: false

b.编写脚本添加

--权限:这边如果不是root登录的,要考虑对宿主机用户、容器用户使用的相关文件/夹进行授权。这里添加上面配置后容器反终止了,测试后,可以:先运行、再编辑配置文件、执行docker restart。数据库的关联操作同mysql,而比 mysql 更多的在命令交互界面执行。

#!/bin/bash

docker stop mg1 && docker rm mg1 
docker stop mg2 && docker rm mg2 
docker stop mg3 && docker rm mg3 

cp -f  mongodb/mongod.conf mongodb.a/mongod.conf && cp -f  mongodb/mongod.conf mongodb.b/mongod.conf
#!!莫名其妙坑爹的问题
chmod 777 /root/tmp/dk/mongodb/mongod.log /root/tmp/dk/mongodb.a/mongod.log /root/tmp/dk/mongodb.b/mongod.log

rm -rf /root/tmp/dk/mongodb/data/* #&& echo ''>/root/tmp/dk/mongodb/mongod.log
docker run --name mg1 \
    -p 27017:27017 \
    -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=123456 \
    -v /root/tmp/dk/mongodb/mongod.conf:/etc/mongod.conf \
    -v /root/tmp/dk/mongodb/mongod.log:/var/log/mongod.log \
    -v /root/tmp/dk/mongodb/data:/data/db \
    -d mongo mongod --config /etc/mongod.conf
    
rm -rf /root/tmp/dk/mongodb.a/data/* #&& echo ''>/root/tmp/dk/mongodb.a/mongod.log
docker run --name mg2 \
    -p 27018:27017 \
    -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=123456 \
    -v /root/tmp/dk/mongodb.a/mongod.conf:/etc/mongod.conf \
    -v /root/tmp/dk/mongodb.a/mongod.log:/var/log/mongod.log \
    -v /root/tmp/dk/mongodb.a/data:/data/db \
    -d mongo mongod --config /etc/mongod.conf
    
rm -rf /root/tmp/dk/mongodb.b/data/* #&& echo ''>/root/tmp/dk/mongodb.b/mongod.log
docker run --name mg3 \
    -p 27019:27017 \
    -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=123456 \
    -v /root/tmp/dk/mongodb.b/mongod.conf:/etc/mongod.conf \
    -v /root/tmp/dk/mongodb.b/mongod.log:/var/log/mongod.log \
    -v /root/tmp/dk/mongodb.b/data:/data/db \
    -d mongo mongod --config /etc/mongod.conf

c.目前容器整体情况

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                               NAMES
531976d71fab        mongo                 "docker-entrypoint.s…"   27 minutes ago      Up 22 minutes       0.0.0.0:27019->27017/tcp            mg3
4e60c4ef93eb        mongo                 "docker-entrypoint.s…"   27 minutes ago      Up 22 minutes       0.0.0.0:27018->27017/tcp            mg2
4319ec04a69a        mongo                 "docker-entrypoint.s…"   27 minutes ago      Up 27 minutes       0.0.0.0:27017->27017/tcp            mg1
2d65770f1e6c        openresty/openresty   "/usr/bin/openresty …"   21 hours ago        Up 21 hours         0.0.0.0:82->80/tcp                  n2
2f0f0357aa69        openresty/openresty   "/usr/bin/openresty …"   21 hours ago        Up 21 hours         0.0.0.0:80->80/tcp                  n1
1c906a7afeba        cffycls/redis5:1.6    "redis-server /etc/r…"   21 hours ago        Up 21 hours         0.0.0.0:6381->6379/tcp              rs
5c71dcc1ab36        cffycls/redis5:1.6    "redis-server /etc/r…"   21 hours ago        Up 21 hours         0.0.0.0:6379->6379/tcp              rm
2b4c57614d22        mysql:8.0             "docker-entrypoint.s…"   2 days ago          Up 30 hours         33060/tcp, 0.0.0.0:3308->3306/tcp   ms
2635980cf576        mysql:8.0             "docker-entrypoint.s…"   2 days ago          Up 30 hours         0.0.0.0:3306->3306/tcp, 33060/tcp   mm

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

逆流而上

逆流而上

阿里巴巴集团成长集编委会 / 电子工业出版社 / 2017-11 / 59.00

本书是阿里巴巴集团荣耀背后的技术血泪史。全书通过分享业务运行过程中各个领域发生的典型“踩坑”案例,帮助大家快速提升自我及团队协作,学习到宝贵的处理经验及实践方案,为互联网生产系统的稳定共同努力。从基础架构、中间件、数据库、云计算、大数据等技术领域中不断积累经验,颠覆技术瓶颈,不断创新以适应不断增长的需求。 本书主要面向互联网技术从业人员和在校师生,使读者能够通过此书基本了解阿里在各技术领域的能力,......一起来看看 《逆流而上》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码