Creating RabbitMQ Containers

@simon_timms | Blog

I bought a new laptop, a Dell XPS 15 and my oh my is it snazzy. The thing I was most excited about was that I’d get to play with Windows containers again. I have 3 other machines in the house but they’re either unsuitable for containers (OSX running Windows in parallels) or I’ve so totally borked them playing with early betas of containers they need to be formatted and reinstalled – possibly also thrown into the sun.

So when I found myself presented with the question “how can we get into messaging in our apps for free?” I figured I’d crack open the laptop and build something with MassTransit. I found that MassTransit supports running on RabbitMQ. Why that sounds like a perfect opportunity to deploy RabbitMQ to a container. The only problem was that I didn’t really know how to do that.

In my heart I felt like running the installer wasn’t quite the right way to go. I’d just copy the installation file into their destination. Problem is that RabbitMQ relies on erlang so I’d have to install that too. So I built a docker file which looked something like

In the erlngDir and rabbitDir I dumped the contents of an install of erlang and rabbitmq. Then I built the container with docker build -t monsters/rabbitmq . Didn’t work. I assume there must be something useful the installer actually does as part of installing files. So next I considered putting in the installers and running them when building the container. That seemed like a huge pain so I got to thinking about using chocolatey. At first I was pretty deadset against using choco; my reasoning being that containers should be lightweight and have only one purpose. Having one time software like chocolatey on there which wouldn’t ever be used seemed like it would make… whoever invented containers mad.

So attempt number two:

That was enough to get Rabbit MQ installed. I still needed to expose some ports for RabbitMQ so I added

Rabbit also likes to know where Erlang lives so some environmental variables for that aren’t going to hurt.

We could forward the RabbitMQ ports to our local machine but I like the idea of using the container as if it were a distinct machine so let’s also enable the management UI from anywhere on the network. To do that we’ll replace the default config file with one that has {loopback_users, []}, in it. We can copy our new config file over the one in the container from the dockerfile and set up a variable to point Rabbit at it.

The config file looks like [{rabbit, [{loopback_users, []}]}]. Finally we’ll start the actual rabbit process as the default action of the container:

Now you can log into the management portal using the guest/guest account.

KvDVTb9.png

It takes quite a while to start up the container and it took me close to 40 years to figure out building the container but it does save me installing rabbitmq on my local machine and makes experimenting with multiple instances pretty jolly easy.

The complete docker file is here:

In my next post I’ll get around to actually using Rabbit MQ because all the yaks are shaved now… I hope.

Contact Us

Contact Us