鲲鹏ARM64架构docker化MongoDB
在 鹏城实验室开发者云平台 上,使用测试机
CentOS7系统环境(若无环境,请参考 鲲鹏arm64 CentOS7 虚拟机学习 )
在这上面本来打算直接安装MongoDB的,但是参照 鲲鹏软件栈官方文档 安装过程出现了一些依赖的问题,后续有时间会专门解决并发文;
于是选择使用docker容器,故本文使用docker搭建MongoDB。
docker环境(若无环境,请参考 鲲鹏920架构arm64版本centos7安装docker )
注1:使用 root 用户
注2:这篇文章上个月就该写的,一直没抽出时间来,今晚补上。
1、搜索mongo镜像
docker search mongo
2、拉取mongo镜像
docker pull mongo
- 注意:不加版本号,默认拉取 latest 最新版本
3、查看mongo镜像
docker images
-
注意:删除mongo镜像
-
docker rmi mongo
4、放行宿主机防火墙端口
参考之前博客 Linux防火墙放行端口
# 查看防火墙状态
systemctl status firewalld
# 开启防火墙
systemctl start firewalld
# 放行单个端口
firewall-cmd --zone=public --add-port=666/tcp --permanent
# 放行多个端口
firewall-cmd --zone=public --add-port=111/tcp --add-port=222/tcp --permanent
# 生效放行 端口
firewall-cmd --reload
# 查看放行端口
firewall-cmd --list-ports
5、创建并运行容器(后台方式)
docker run --name mongo -d -v /home/mongo/data:/data/db -p 666:27017 mongo
- 参数含义:
参数 | 说明 |
---|---|
–name | 创建的容器名,方便启动、关闭、重启、删除容器等操作 |
-d | 后台运行方式 |
-v | 宿主机目录映射到容器内部目录 |
-p | 宿主机端口 : docker容器端口 映射,可同时映射多个端口(-p 1234:1234 -p 5678:5678) |
- 注意:如果创建容器过程中出现下面这个报错 docker: Error response from daemon: driver failed programming external connectivity on endpoint mongo
-
解决办法:
-
1)删掉错误容器,
-
docker rm mongo
-
2)重启docker服务。
-
systemctl restart docker
-
再创建一个过过瘾
6、查看容器进程状态
docker ps -a
7、查看容器映射的本地目录
ls /home/mongo/data
ls /home/mongo/data-m2
8、进入mongo容器
docker exec -it mongo /bin/bash
9、查看mongo版本
mongo --version
10、mongo命令帮助命令
mongo --help
11、无密码连接mongo数据库
mongo --port 27017
12、mongo数据库 sql 帮助命令
help
13、查看mongo数据库名、集合、用户
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
>
> show collections
>
> show users
>
14、使用 admin 数据库
use admin
15、创建admin数据库用户并设置密码及权限
- root 用户,root 权限
db.createUser({
user:"root",pwd:"mongo_123!",roles:[{role:'root',db:'admin'}]})
- admin用户,读写任何数据库 权限
db.createUser({
user:'admin',pwd:'mongo_123$',roles:[{role:'readWriteAnyDatabase',db:'admin'}]})
- user用户,读写数据库 权限
db.createUser({
user:"user",pwd:"user123",roles:[{role:'readWrite',db:'admin'}]})
16、查看mongo中admin数据库用户
show users
17、修改mongo中admin数据库用户密码
以 user 用户为例
db.changeUserPassword('user','123456');
18、退出mongo数据库
- 退出sql命令行终端
- 退出mongo容器
exit
19、Navicat Premium 远程连接
-
鹏城实验室开发者云平台测试机内外网映射
-
内网ip:port 映射到 外网ip:port
-
15.0.0.48:666 >> 210.22.22.150:3735
IP:210.22.22.150 端口:3735 数据库 admin 用户 user 密码 123456
-
Navicat Premium 远程连接
20、关掉mongo容器
-
以关掉容器 mongo2 为例
-
docker stop mongo2
21、重启mongo容器
-
以重启容器 mongo2 为例
-
docker start mongo2
- 注意,重启直接 start 就行了
22、删除mongo容器
- 以删除容器 mongo2 为例
注意:
先关掉容器,再删除容器
(若要删除mongo镜像,先停掉mongo容器)
否则,会报错 Error response from daemon: You cannot remove a running container
-
先 stop 容器 mongo2
-
docker stop mongo2
-
再 rm 容器 mongo2
-
docker rm mongo2
-
注意,删掉容器 mongo2 不可恢复
-
回到 7、查看容器映射的本地目录
-
ls /home/mongo/data-m2/
-
发现映射目录好处的了么?删掉容器,但是映射的目录还在;
-
若创建容器时,不做映射目录,则不会保存容器数据,在下面容器单独解说。
23、mongo容器安全
关于使用docker容器,众说纷纭
以使用mongo容器为例,跟大家谈一谈容器如何做到安全?
23.1,第一、要清楚虚拟机跟容器的区别
- “虚拟机是虚拟出来一个新世界,每个实例都是一台单独的机器;而容器则是虚拟出来一个操作系统,每个应用彼此隔离。”
- 具体区别:
特性 | 虚拟机 | Docker容器 |
---|---|---|
启动速度 | 分钟级 | 秒级 |
硬盘使用 | 一般为GB | 一般为MB |
内存代价 | 较大 | 很小 |
运行密度 | 一般几十个 | 单机支持上千个容器 |
性能 | 弱于原生 | 接近原生 |
隔离性 | 完全隔离 | 安全隔离 |
迁移性 | 一般(速度慢) | 优秀(速度快) |
23.2,第二、要清楚传统安装MongoDB数据库跟mongo容器化的本质区别
- 具体区别:
区别 | 传统安装 | 容器化安装 |
---|---|---|
安装环境 | 一般物理机(也有虚拟机) | 具备docker环境 |
安装效率 | 一般(单机、集群) | 较高(单机、集群) |
版本升级 | 数据库升级版本 | 重新部署 |
数据安全 | 主机存储,不能保证不丢失数据 | Docker volumes不可靠,崩溃并未正确关闭,可能会损坏数据 |
运行环境 | 对IO要求较高,专用环境,本地运行 | 需要配置大量额外资源,但并不一定完全使用,从而造成资源浪费 |
网络问题 | 物理网络、虚拟机网络,较稳定 | docker网络虚拟化,受底层虚拟化管理程序限制 |
数据库状态 | 系统故障,使应用程序崩溃,影响使用 | 编排容器解决单点故障,重启容器 |
隔离级别 | 隔离级别越多,获得的资源开销就越多 | 水平伸缩只能用于无状态计算服务,而不是数据库 |
端口映射 | 一般内网端口,外网通过物理防火墙做端口映射 | 创建容器时,宿主机端口 映射 容器内部端口 |
23.3,第三、数据挂载区别
区别 | 主机 | 容器 |
---|---|---|
磁盘挂载方式 | 新加硬盘,直接使用挂载的磁盘存储数据 | 创建容器时,把挂载好的磁盘映射到容器内部目录 |
24、推荐个人原创docker容器系列文章
25、最后声明
创作辛苦!
白嫖党可三连(关注+点赞+分享),可白嫖,可转载。
请尊重原创不要抄袭!
请尊重原创不要抄袭!
请尊重原创不要抄袭!