docker学习(11)—使用docker安装rabbitmq 3.8

1、镜像的区别
management:带管理页面的
alpine:基于Alpine Linux制作的镜像
所以我们要选择带管理页面的版本

2、拉取镜像
docker pull rabbitmq:3.8-management

3、启动命令
建立配置目录、数据目录、日志目录
mkdir -p /data/rabbitmq/etc
mkdir -p /data/rabbitmq/lib
mkdir -p /data/rabbitmq/log

设置权限
chmod 777 /data/rabbitmq/etc
chmod 777 /data/rabbitmq/lib
chmod 777 /data/rabbitmq/log

否则容器启动报错:
touch: cannot touch '/etc/rabbitmq/rabbitmq.conf': Permission denied

启动容器(只映射数据目录)
docker run -itd --name rabbitmq -p 5672:5672 -p 15672:15672 -v /data/rabbitmq/lib:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin rabbitmq:3.8-management

启动容器(映射配置、数据、日志)
docker run -itd --name rabbitmq -p 5672:5672 -p 15672:15672 -v /data/rabbitmq/etc:/etc/rabbitmq -v /data/rabbitmq/lib:/var/lib/rabbitmq -v /data/rabbitmq/log:/var/log/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin rabbitmq:3.8-management

建议是把可修改的文件,放在宿主机,方便管理

发现一个问题,只映射数据目录可以访问控制台,映射了配置目录访问不了控制台
区别是如果只映射数据目录,进入容器,在/etc/rabbitmq目录下有:
conf.d、enabled_plugins、rabbitmq.conf三个文件
而映射了配置目录,在/data/rabbitmq/etc目录下,只有:
rabbitmq.conf一个文件

进入容器,手工启用插件:
rabbitmq-plugins enable rabbitmq_management
rabbitmq-plugins enable rabbitmq_prometheus

文件enabled_plugins的内容是:
[rabbitmq_management,rabbitmq_prometheus].

重启容器:
docker restart b3a70eba1310

猜测,可能是因为映射了配置目录,配置由用户自己来决定,所以没有默认启用插件?

4、说明
-p:指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号)
-v:映射目录或文件(配置文件、数据、日志都映射到宿主机)
--hostname:主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名)
-e:指定环境变量(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)

5、访问控制台
http://server-ip:15672

6、默认端口
5672:tcp监听的默认端口号
5671:tcp监听带TLS的默认端口号
15672:管理控制台默认端口号

7、查看本地目录/data/rabbitmq
是建立了一个mnesia文件夹
和rabbitmq的关系是,mnesia是一个分布式数据库模块,用于持久化数据

8、rabbitmq概念
connection:是一个抽象的socket连接
channel:信道,为了复用物理tcp连接
queue:队列,定义发送到哪里去
消费者消费:是服务器推送消息给消费者(推的模式)