- 什么是Docker容器
一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。
如果需要通俗的描述容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境。
因为有了 Docker 容器,所以在日常开发中如果需要用到某些组件,我会选择直接使用 Docker 安装,可以省掉繁琐的环境配置流程。在我需要用的 RockerMQ时,就直接选择了用Docker安装NameServer、Broker、Console。
- 安装RockerMq容器
操作Docker使用Docker命令时,请直接使用root用户。(如何安装Docker 请参考 https://my.oschina.net/u/4213839/blog/5064569 )
搜索 RocketMQ 镜像
docker search rocketmq
参考一下网上的安装教程,我尝试了几个镜像,只有 foxiswho/rockermq 这个镜像安装成功。
查看一下这个镜像的所有版本
curl https://registry.hub.docker.com/v1/repositories/foxiswho/rocketmq/tags | tr -d '[\[\]" ]' | tr '}' '\n' | awk -F: -v image='foxiswho/rocketmq' '{if(NR!=NF && $3 != ""){printf("%s:%s\n",image,$3)}}'
我使用的时 4.5.1 这个版本,创建NameServer容器并启动,端口使用 RecketMQ 默认端口。
docker run -d -p 9876:9876 --name rmqserver foxiswho/rocketmq:server-4.5.1
创建 broker 容器并启动,因为 Broker 有需要配置需要我们修改,所以在创建 broker 容器时,使用宿主机的配置文件,方便日后修改。
首先创建一个配置文件
vim usr/local/rocketmq/conf/broker.conf
在配置文件内加入以下内容
关于 brokerIP1 很多博客中说要写外网IP,因为我是 VM 中安装的 CentOS8 ,所以我这里写的是CentOS8的IP。这里一定要改,否则项目连接Broker会出现各种异常。
brokerIP1 = 192.168.109.128
listenPort = 10911
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
然后再创建并启动 Broker
docker run -d -p 10911:10911 -p 10909:10909 --name rmqbroker --link rmqserver:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "JAVA_OPTS=-Duser.home=/opt" -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m" -v /usr/local/rocketmq/conf/broker.conf:/etc/rocketmq/broker.conf foxiswho/rocketmq:broker-4.5.1
最后再通过 docker 安装一下 RocketMQ 的可视化管理页面,当然这里也可以去把这部分代码 clone到本地,maven install 启动。个人认为使用docker更方便
docker run -d --name rmqconsole -p 8180:8080 --link rmqserver:namesrv -e "JAVA_OPTS=-Drocketmq.namesrv.addr=namesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -t styletang/rocketmq-console-ng
因为宿主机8080端口被使用了,所以我这里指定了 8180 端口,可根据实际情况修改。
到此,我们通过docket命令查看一下 三个容器的状态, 如果镜像太多 可以通过grep筛选一下
docker ps -a | grep rocket
如果 status 这一列 有 Up 字样,说明容器启动成功。
访问 http://192.168.109.128:8180/