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

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

内容简介:密码登录+容器数据共享,主从复制添加配置文件夹,组织容器命令。从测试容器中匹配搜索得到 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

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

查看所有标签

猜你喜欢:

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

Practical Algorithms for Programmers

Practical Algorithms for Programmers

Andrew Binstock、John Rex / Addison-Wesley Professional / 1995-06-29 / USD 39.99

Most algorithm books today are either academic textbooks or rehashes of the same tired set of algorithms. Practical Algorithms for Programmers is the first book to give complete code implementations o......一起来看看 《Practical Algorithms for Programmers》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

URL 编码/解码
URL 编码/解码

URL 编码/解码