Linux下Docker安装几种NoSQL和MQ和DB

注:本文中所有配置文件都是我用echo或者cat输入的,不全,最好用docker cp
如下面的diamagnetic就是将mysql-service容器内的配置文件复制到宿主机上
然后在第二次运行的时候再挂载
1 | docker cp mysql-service:/etc/mysql/my.cnf /root/docker/mysql/conf |
- 在Linux环境(虚拟机)下使用Docker配置NoSQL
- Docker
- MongoDB
- Redis
- Elasticsearch
- RabbitMQ
- RocketMQ
- Docker-Compose
- Mysql
- Minio
- Milvus
我的服务器是本地虚拟机,所以直接关了防火墙
具体要开的端口是mongodb:27017
redis:6379
es + kibana:9200 9300 5601
rabbitmq 5672 15672
Docker
- 卸载(可选)如果之前安装过旧版本的Docker,可以使用下面命令卸载:
1
2
3
4
5
6
7
8
9
10
11yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce - 安装docker。服务器机器要能联网,安装yum工具
1
2
3yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken - 更新本地镜像源,这里设为了阿里云的镜像
1
2
3yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo1
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
1
yum makecache fast
- 安装docker社区版
1
yum install -y docker-ce
- 启动docker
1
2systemctl start docker
systemctl enable docker - 查看docker版本,验证启动成功
1
docker -v
- 配置镜像加速。这里参考阿里云的镜像加速文档:加速文档,把文档里的代码直接全粘了运行docker官方镜像仓库网速较差,我们需要设置国内镜像服务。
1
2
3
4
5
6
7
8sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ppztf0yr.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker常用命令
MongoDB
我是拉取最新版的
1
docker pull mongo
预先创建好被挂载的配置文件
mongodb.conf 配置文件详解1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28mkdir -p /myData/mongo/conf
mkdir -p /myData/mongo/data
mkdir -p /myData/mongo/log
cd /myData/mongo/conf
cat > mongodb.conf <<EOF
端口
port=27017
数据库文件存放目录
dbpath=/myData/mongo/data
日志文件存放路径
logpath=/myData/mongo/log
使用追加方式写日志
logappend=true
以守护线程的方式运行,创建服务器进程
fork=true
最大同时连接数
maxConns=100
不启用验证
noauth=true
每次写入会记录一条操作日志
journal=true
存储引擎有mmapv1、wiredTiger、mongorocks
storageEngine=wiredTiger
访问IP
bind_ip=0.0.0.0
用户验证
auth=true
EOF新建一个名为mongo的容器运行该mongo镜像,映射宿主机的 27017 端口为容器服务的 27017 端口,并指定要验证才能使用服务
1
2
3
4
5docker run \
--name mongo \
-p 27017:27017 \
-v /myData/mongo/data:/data/db -v /myData/mongo/conf:/data/conf -v /myData/mongo/log:/data/log \
-d mongo --auth查看运行情况
1
docker ps
进入容器
1
docker exec -it mongo mongo admin
接下来的角色权限配置可以参考MongoDB的角色创建及配置
创建用户
1
db.createUser({user:"root",pwd:"root",roles:["root"]});
尝试登录该用户,输出1表示成功(同redis的auth)
1
db.auth('root','root')
用可视化工具连接时也是username和password都是root
退出
1
exit
Redis
拉取
1
docker pull redis
预先创建好挂载目录及文件
注意daemonize不能为yes,因为docker run里的-d就是守护进程
参考自docker日记(二)–redis1
2
3
4
5
6
7
8
9
10
11mkdir -p /myData/redis/conf
mkdir -p /myData/redis/data
touch /myData/redis/conf/redis.conf
cat > /myData/redis/conf/redis.conf <<EOF
bind 0.0.0.0
protected-mode no
appendonly yes
requirepass root
daemonize no
EOF
chmod -R 777 /myData/redis/创建容器运行该镜像
-v /myData/redis/data:/data \【-v:目录挂载,将容器内部的data 文件夹挂载到Linux的/myData/redis/data目录里】
-V /myData/redis/conf/redis.conf:/etc/redis/redis.conf \【将/etc/redis/redis.conf挂载到Linux中指定目录下】
-d --restart=always 【配置开机启动】
TIMEZONE解决redis时区不同步问题
注意最后一行是用容器内配置文件启动redis服务端1
2
3
4
5
6docker run -p 6379:6379 --name redis \
--sysctl net.core.somaxconn=1024 --privileged=true --restart=always \
-v /myData/redis/data:/data \
-v /myData/redis/conf/redis.conf:/etc/redis/redis.conf \
-e TIME_ZONE="Asia/Shanghai" -e TZ="Asia/Shanghai" \
-d redis redis-server /etc/redis/redis.conf进入客户端
1
docker exec -it redis redis-cli
测试
注意下面这个root是我们之前配的密码,如果你想免密,就把那行删掉或注释掉1
2
3auth root
ping
exit返回
PONG
即成功
Elasticsearch
- 拉取
1
2docker pull elasticsearch:7.6.2
docker pull kibana:7.6.2 - 准备好外部挂在目录和文件,这里文件就用我给出的吧,别复制容器里的了,甚至都不如这里的全
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23mkdir -p /myData/elasticsearch/config
mkdir -p /myData/elasticsearch/plugins
mkdir -p /myData/kibana/config
mkdir -p /myData/kibana/data
cat > /myData/elasticsearch/config/elasticsearch.yml <<EOF
http.host: 0.0.0.0
Uncomment the following lines for a production cluster deployment
transport.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1
Password config
这一步是开启x-pack插件
xpack.security.enabled: true
http.cors.enabled: true
http.cors.allow-origin: "*"
EOF
cat > /myData/kibana/config/kibana.yml<<EOF
server.name: kibana
server.host: "0.0.0.0"
elasticsearch.hosts: [ "http://es服务器的IP:9200" ]
elasticsearch.username: "elastic"
elasticsearch.password: "自己待会会设置的密码"
i18n.locale: "zh-CN"
EOF - 新建容器运行该镜像
1
2
3
4
5
6
7
8docker run -d -it --restart=always --privileged=true \
--name=elasticsearch -p 9200:9200 -p 9300:9300 -p 5601:5601 \
-e "discovery.type=single-node" -e "cluster.name=elasticsearch" \
-v /myData/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /myData/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-e ES_JAVA_OPTS="-Xms512M -Xmx512M" elasticsearch:7.6.2
-e ES_JAVA_OPTS="-Xms4G -Xmx4G" 设置运行内存,这个内存不建议太大。因为es走的是直接内存也就是系统内存,所以要预留足够的系统内存。我这台服务器8核16G所以给了4G。如果系统内存预留不足,会导致以后检索时速度达不到预期速度。 - 进入es容器设置密码
1
2
3
4docker exec -it elasticsearch /bin/bash
cd bin
开启密码设置
elasticsearch-setup-passwords interactive1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25输出 如下
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
输入Y
Please confirm that you would like to continue [y/N]Y
依次设置密码
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana_system]:
Reenter password for [kibana_system]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic] - 重启es
1
exit
1
docker restart elasticsearch
- 修改kibana.yml的配置
- 新建kibana容器(kibana是一个可视化es数据的管理平台)
1
2docker run -itd -e ELASTICSEARCH_URL=http://ES服务器IP:9200 --name kibana \
-v /myData/kibana/config:/usr/share/kibana/config --network=container:elasticsearch kibana:7.6.2 - 测试
http://ES服务器IP:9200
如下面的效果并能正确登录说明成功了
注意用户名是elastichttp://kibana服务器IP:5601/
RabbitMQ
拉镜像
1
docker pull rabbitmq:management
准备好外部挂载目录
1
2mkdir -p /myData/rabbitmq/{data,log,conf}
chmod -R 777 /myData/rabbitmq新建容器运行该镜像
1
2
3
4docker run -d -p 5672:5672 -p 15672:15672 \
-v /myData/rabbitmq/data:/var/lib/rabbitmq -v /myData/rabbitmq/conf:/etc/rabbitmq -v /myData/rabbitmq/log:/var/log/rabbitmq \
--name rabbitmq --hostname=rabbitmq-1 --restart=always \
rabbitmq:management进入容器
1
docker exec -it rabbitmq /bin/bash
启动可视化插件
1
rabbitmq-plugins enable rabbitmq_management
建立供外部访问的用户
先别急着退出来,还在这个容器里
添加账号 rabbitmqctl add_user 账号 密码
设置权限 rabbitmqctl set_permissions -p / 账号 ".*" ".*" ".*"
设置角色rabbitmqctl set_user_tags 账号 administrator
1
2
3rabbitmqctl add_user root root
rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
rabbitmqctl set_user_tags root administrator测试
访问web界面http://rabbitmq服务器的IP:15672/
有个默认账号和密码都是guest
当然也可以用我们刚创建的那一个
RocketMQ
- 创建namesrv服务
1
2
3
4
5
6
7
8
9
10
11
12
13docker pull rocketmqinc/rocketmq
mkdir -p /myData/rocketmq/data/namesrv/logs /myData/rocketmq/data/namesrv/store
docker run -d \
--restart=always \
--name rmqnamesrv \
-p 9876:9876 \
-v /myData/rocketmq/data/namesrv/logs:/root/logs \
-v /myData/rocketmq/data/namesrv/store:/root/store \
-e "MAX_POSSIBLE_HEAP=100000000" \
rocketmqinc/rocketmq \
sh mqnamesrv - 创建broke结点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34mkdir -p /myData/rocketmq/data/broker/logs /myData/rocketmq/data/broker/store /myData/rocketmq/conf
cat > /myData/rocketmq/conf/broker.conf <<EOF
# 所属集群名称,如果节点较多可以配置多个
brokerClusterName = DefaultCluster
#broker名称,master和slave使用相同的名称,表明他们的主从关系
brokerName = broker-a
#0表示Master,大于0表示不同的slave
brokerId = 0
#表示几点做消息删除动作,默认是凌晨4点
deleteWhen = 04
#在磁盘上保留消息的时长,单位是小时
fileReservedTime = 48
#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;
brokerRole = ASYNC_MASTER
#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
flushDiskType = ASYNC_FLUSH
# 设置broker节点所在服务器的ip地址
brokerIP1 = IP自己填
EOF
docker run -d \
--restart=always \
--name rmqbroker \
--link rmqnamesrv:namesrv \
-p 10911:10911 \
-p 10909:10909 \
-v /myData/rocketmq/data/broker/logs:/root/logs \
-v /myData/rocketmq/data/broker/store:/root/store \
-v /myData/rocketmq/conf/broker.conf:/opt/rocketmq/conf/broker.conf \
-e "NAMESRV_ADDR=namesrv:9876" \
-e "MAX_POSSIBLE_HEAP=200000000" \
rocketmqinc/rocketmq \
sh mqbroker -c /opt/rocketmq/conf/broker.conf - 创建rocketmq-console
1
2
3
4
5
6
7
8
9docker pull pangliang/rocketmq-console-ng
docker run -d \
--restart=always \
--name rmqadmin \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=IP:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false" \
-p 9111:8080 \
pangliang/rocketmq-console-ng - 开放对应端口
1
2
3
4
5firewall-cmd --permanent --zone=public --add-port=9876/tcp
firewall-cmd --permanent --zone=public --add-port=10911/tcp
firewall-cmd --permanent --zone=public --add-port=9111/tcp
# 立即生效
firewall-cmd --reload - 记得开放9876,10911,10912,10909、9111(自定义的控制台端口)五个端口
- 查看控制台
http://ip:9111
Docker-Compose
- 下载并到服务器上
mv docker-compose-linux-x86_64 docker-compose
chmod 777 docker-compose
mv docker-compose /usr/local/bin/
vim /etc/profile
、export PATH=$PATH:/usr/local/bin/
、source /etc/profile
docker-compose -v
Docker-compose安装
1 | docker-compose up |
Mysql
1 | 拉取 |
在3307端口装一个5.7的mysql
1 | docker run -p 3307:3306 --name mysql5.7 \ |
MinIO
1 | docker pull minio/minio |
登录consolehttp://IP:9999
用户名和密码为admin
admin123
Milvus
1 | mkdir /usr/local/env/milvus |
Nginx
1 | docker pull nginx |
PostgreSQL
1 | docker pull postgres |
- 标题: Linux下Docker安装几种NoSQL和MQ和DB
- 作者: urlyy
- 创建于 : 2022-02-28 13:27:48
- 更新于 : 2025-03-16 01:04:15
- 链接: https://urlyy.github.io/2022/02/28/Linux下Docker安装几种NoSQL和MQ/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。