概述
首先可查看docker官网说明https://docs.docker.com/samples/library/rabbitmq/以了解如何使用rabbitmq
一、手动安装和配置rabbitmq
A.下载镜像
输入命令systemctl start docker
确保docker服务已启动。
输入命令docker pull rabbitmq:3.7.8-management
来下载指定版本的且带有管理工具的镜像。
输入命令docker images
来查看所有镜像,可看到刚下的rabbitmq,大约149M。
B.了解基本docker命令配置
通过docker run运行rabbitmq容器需要了解的参数有下面这些
-p 表示将主机端口左xxx映射到容器内端口右xxx
-d 表示在后台运行
–name 表示启动后的容器名称
–hostname 表示rabbitmq的节点名,不写则默认为主机名。rabbitmq是根据节点来存储数据的。必须唯一
-e 指定环境变量,RABBITMQ_DEFAULT_VHOST:默认虚拟主机名;
RABBITMQ_DEFAULT_USER:默认的用户名;
RABBITMQ_DEFAULT_PASS:默认用户名的密码;
RABBITMQ_VM_MEMORY_HIGH_WATERMARK:最多使用多少内存,例如0.4表示最多使用主机的40%的内存;
还有其它环境变量可去官网查看。这些变量将通过docker引擎传递。要注意如果设置了rabbitmq.conf配置文件,那么配置文件优先,环境变量是无效的。
–mount type=bind,src=主机的目录或文件,dst=容器的目录或文件 表示将主机某个自定义的目录或文件映射为容器的相关相录或文件,这样即使容器被删除,但容器之外映射的那个目录和文件都还在。从docker官网的说明中可以找到相关可以设置的选项。
C.了解其它配置
详细可看http://www.rabbitmq.com/configure.html
从本文开头的第二个网址可知rabbitmq的配置文件路径是/etc/rabbitmq/rabbitmq.conf(配置文件用的新语法则必须后缀是.conf)
那么我新建自定义目录或文件来映射,再通过–mount映射。
D.配置并运行容器
输入cd /
进入主机根目录
输入ls
查看有哪些目录
输入mkdir -p /my_rabbitmq/config
一次性在根目录下面创建好my_rabbitmq和子目录config两个文件夹。(mkdir -p或者–parents 若路径中的某些目录尚不存在,将自动创建不存在的目录,即一次可以建立多个目录)
输入cd my_rabbitmq/config
进入config目录
输入vi rabbitmq.config
创建配置文件
输入i
进入编辑状态
输入以下配置内容:(#号开头的都是注释)
# 虚拟主机名
default_vhost = my_rabbitmq_host
# 内存使用设置
# vm_memory_high_watermark.relative = 0.5相对于可用内存最多使用50%
# vm_memory_high_watermark.absolute = 2GB 相对于总内存最多使用2G
vm_memory_high_watermark.absolute = 0.4
## 用户设置
# 默认用户名
default_user = admin
# 默认密码
default_pass = abc123456
# 默认用户的tags
default_user_tags.administrator = true
# 默认用户的权限
default_permissions.configure = .*
default_permissions.read = .*
default_permissions.write = .*
## 日志设置
## 日志文件名
log.file = rabbit.log
## 也可禁用日志
# log.file = false
## 日志等级
# 这里开时设为info方便调式,生产时改为error,只在出错时才记日志,节省硬盘
log.file.level = info
## 其它一些设置
# 每个connection最大允许的channels数,0表示无限制,默认值是2047
channel_max = 128
按Esc键退出编辑模式,然后输入:wq
保存并退出。
那么–mount语句则是下面这样
–mount type=bind,src=/my_rabbitmq/config/rabbitmq.config,dst=/etc/rabbitmq/rabbitmq.config
输入cd ../
回到上一级目录
输入mkdir -p log
创建目录用于日志,这时my_rabbitmq目录下就有两个目录了config、log
那么日志目录映射是下面这样
–mount type=bind,src=/my_rabbitmq/log,dst=/var/log/rabbitmq
完整运行rabbitmq容器命令如下(注意前有一个空格,后没有空格),也可以写成一行,就不需要用了
docker run -d --name rabbitmq01
-p 5672:5672 -p 15672:15672
--hostname my_node01
--mount type=bind,src=/my_rabbitmq/config/rabbitmq.conf,dst=/etc/rabbitmq/rabbitmq.conf
--mount type=bind,src=/my_rabbitmq/log,dst=/var/log/rabbitmq
rabbitmq:3.7.8-management
其中5672是提供给应用程序访问的端口,15672是rabbitmq自带的Web管理工具所使用的端口。(生产时去掉-p 15672:15672)
运行命令后输入docker ps
查看正在运行的容器,如果找不到名为rabbitmq01的容器,再输入docker ps -a查看所有容器,如果发现rabbitmq01的容器的status是Exited的话说明运行容器失败,有问题,如果是up则成功了,(开始我用的.config所以失败了)。这时可输入docker logs 容器id或名称来查看日志。然后输入docker rm 容器id或名称即可删除名为rabbitmq01的容器。
从docker ps命令查看运行成功后,
输入docker logs rabbitmq01
查看日志来验证配置文件的设置
然后需要开放我虚拟CentOS7.4的5672端口以供外部访问rabbimt
输入firewall-cmd --zone=public --add-port=5672/tcp --permanent
输入firewall-cmd --zone=public --add-port=15672/tcp --permanent
其中–permanent表示永远开放,不加则是临时开放,重启就失效了
E.在外部访问centos的rabbitmq
输入ifconfig
在ens33节查看到虚拟机地址是192.168.213.144
在我的win10系统中输入http://192.168.213.144:15672进入rabbitmq的web管理工具登录界面,输入用户名和密码后成功登录。
F.C#访问centos的rabbitmq
在我的win10系统中打开VS2017,新建一个net core控制台程序。
详情可看http://www.rabbitmq.com/dotnet-api-guide.html
在nuget中下载RabbitMQ.Client包,使用如下代码:
static void Main(string[] args)
{
//一、连接rabbitmq
ConnectionFactory factory = new ConnectionFactory
{
UserName = "admin",
Password = "abc123456",
VirtualHost = "my_rabbitmq_host",
HostName = "192.168.213.144",
Port = 5672
};
IConnection conn = factory.CreateConnection();
//二、创建一个通道
IModel channel = conn.CreateModel();
//三、创建一个交换机
string exchangeName = "exchange1";
string queueName = "queue1";
string routingKey = "routingKey1";
channel.ExchangeDeclare(exchangeName, ExchangeType.Direct);
//四、创建一个消息队列并且绑定到交换机上
channel.QueueDeclare(queueName, false, false, false, null);
channel.QueueBind(queueName, exchangeName, routingKey, null);
//五、发道一个消息到消息队列
byte[] messageBodyBytes = System.Text.Encoding.UTF8.GetBytes("Hello, world!");
channel.BasicPublish(exchangeName, routingKey, null, messageBodyBytes);
Console.Read();
}
运行程序后,再登录web管理工具,可在里面看到相关数据。
二、通过docker-compose自动安装和配置rabbitmq
先清理前面手动安装的rabbitmq,但保留原先的创建的目录和配置文件。
输入docker stop rabbitmq01
停止容器。
输入docker rm rabbitmq01
删除容器。
输入docker rmi rabbitmq:3.7.8-management
删除镜像。
输入docker images
再查看,可看到已成功删除rabbitmq镜像。
输入cd /my_rabbitmq
进入此目录。
输入vi docker-compose-rabbitmq.yml
创建一个yml文件。
输入i
进入编辑状态
输入以下代码(切记不要把在windows中写好的复制过来,还是在centos中创建文件并一个个字符手动敲入最保险,本人复制过来被坑,搞了好久不行,结果手动输入就编译通过了,切记该空格的一定要空格,yaml语法检查非常严格,以下代码中的version版本取决于你装的docker版本支持的情况,具体关于 .yml文件的说明请看官网https://docs.docker.com/compose/compose-file)
version: '3.7'
services:
rabbitmq:
container_name: 'rabbitmq01'
image: rabbitmq:3.7.8-management
hostname: 'my_node01'
restart: always
ports:
- '5672:5672'
- '15672:15672'
volumes:
- /my_rabbitmq/config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
- /my_rabbitmq/log:/var/log/rabbitmq
输入docker-compose -f docker-compose-rabbitmq.yml build
先编译看有错误没。
如没错误,就输入docker-compose -f docker-compose-rabbitmq.yml up -d
执行目录中的.yml文件,然后就可看到开始下载rabbitmq镜像,下载完后自动启动容器。
完成后输入docker ps
查看正在运行容器,一切OK。
然后在我的win10系统中,打开浏览器登录rabbitmq的web管理工具,也OK。
最后通过C#访问,也OK。
最后
以上就是朴素马里奥为你收集整理的在CentOS7.4的Docker下安装rabbitmq的全部内容,希望文章能够帮你解决在CentOS7.4的Docker下安装rabbitmq所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复