项目中使用rabbitmq,由于项目都是用docker部署的,所以需要一个rabbitmq的docker镜像,记录一下搭建和制作镜像过程。
这个网上也有很多教程,windows环境安装docker环境,本篇文章就不具体说明了。可以顺便安装个docker desktop,便于操作。
下载centos7的docker镜像,这个有很多源可以下载,可以找个国内的源,下载的能快点。
注:搭建过程需要对linux命令和docker命令有一定的了解。
有了centos7的docker镜像,需要加载此镜像,才能在docker中看到,具体命令如下:
注:其中【centos.7.61810.tar】为镜像名称。
docker load -i centos.7.61810.tar
创建完成之后,可以使用如下命令查看:或者在docker desktop里也能看见。
docker ps -a
在docker desktop中看到新加载的centos7镜像,直接启动,之后的操作都在此容器中进行。
准备工作完成,下面我们就开始正式搭建rabbitmq环境。
由于rabbitmq使用erlang语言写的,所以第一步就是要安装erlang环境:
yum install erlang
如果出现如下错误,说明安装失败:
No package erlang available.
Error: Nothing to do
打开 /etc/yum.repos.d/检查是否有epel.repo文件。如果没有则创建文件:
cat>>epel.repo
文件内容如下:
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
然后再次安装Erlang,这回正常应该就安装成功了。输入如下命令可以查看erlang的信息:
[root@localhost rabbitmq]# erl
这两个在安装rabbitmq时也会用,所以提前安装了,要不等会安装rabbitmq的时候也会报错。
yum -y install socat
yum -y install logrotate
去rabbitmq官网下载安装包,这里会把所有版本都列出来,根据Erlang版本选择合适版本的RabbitMQ,这里使用RabbitMQ 3.6.8.release。
下载之后传到docker里,下载的应是一个rpm文件。使用如下命令安装:
rpm -ivh rabbitmq-server-3.6.8-1.el7.noarch.rpm
rabbitmq运行相关命令:
systemctl start rabbitmq-server
systemctl stop rabbitmq-server
systemctl status rabbitmq-server
systemctl restart rabbitmq-server
[root@localhost ~]# rabbitmqctl add_user test 123456
Creating user “test” …
rabbitmqctl set_permissions -p "/" test ".*" ".*" ".*"
Setting permissions for user “test” in vhost “/” …
rabbitmqctl list_users
Listing users …
guest [administrator]
test []
rabbitmqctl set_user_tags test administrator
Setting tags for user “test” to [administrator] …
rabbitmq-plugins enable rabbitmq_management
此时,访问登录:http://IP:15672/#/ 即可查看rabbitmq的管理页面了。
配置完成之后,使用如下命令制作镜像:
docker commit -a "author name" -m "rabbitmq image" 4eb8da4443ef rabbitmq:3.6.8
至此,rabbitmq的镜像制作完成,目前还有个问题是,每次通过镜像生成容器之后,用户会丢失,这个问题是因为hostname改变引起的,具体可以百度一下,在此文章中就不写了。