Mesos Docker Container Configuration

By Bill Ward | April 12, 2017

Mesos comes with it’s own container technology which is pretty cool in and of itself but it also has the option to make use of Docker to manage containers. This opens up a lot of possibilites for your mesos cluster.

If you have been following my posts about mesos then you should have a basic mesos cluster configured. This post builds on that post by enabling docker containers.

Prerequisites

Since my first article setup mesos on Ubuntu 16.10 this article assumes the same. You can still follow this post if you have a different linux distribution, just find the instructions for installing Docker on your distribution.

Mesos Slave Configuration

All of the configuration performed for this post will be done on the mesos slaves. You will not have to do anything on the master(s).

Install Docker

Our first task will be to install Docker on our mesos slave.

sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
sudo apt-add-repository 'deb https://apt.dockerproject.org/repo ubuntu-yakkety main'
sudo apt update
sudo apt install -y docker-engine

Since we installed Mesos to use a Systemd service file which runs as the root user, we don’t need to worry about giving other users access to running docker.

Update Mesos SystemD Service

Now we need to update our /etc/systemd/system/mesos-slave.service file to make use of Docker. Add these options to the ExecStart line:

--containerizers=docker,mesos --image_providers=appc,docker --isolation=filesystem/linux,docker/runtime

Your mesos-slave.service file should now look like this:

[Unit]
Description=Mesos Slave Service

[Service]
ExecStart=/usr/local/sbin/mesos-slave --master=zk://192.168.1.30:2181,192.168.1.31:2181,192.168.1.32:2181/mesos --work_dir=/var/lib/mesos --containerizers=docker,mesos --image_providers=appc,docker --isolation=filesystem/linux,docker/runtime

[Install]
WantedBy=multi-user.target

Save the file and exit.

Configure IPTables

Next we need to configure IPTables to allow traffic through the docker0 interface:

iptables -A INPUT -s 172.17.0.0/16 -i docker0 -p tcp -j ACCEPT

Restart Service

The last step is to restart the slave service.

sudo systemctl restart mesos-slave.service

You now have docker enabled as a containerizer for mesos.

Conclusion / Next Steps

To make use of Docker containers you will need to use Marathon, which if you followed my post CONFIGURING A MESOS/MARATHON CLUSTER ON UBUNTU 16.04 you already have! If not then you can follow the Marathon Installation section in that post to get it running. Look for a post soon on how to run a docker container in Marathon.

I hope you enjoyed this post. If it was helpful or if it was way off then please comment and let me know.

Subscribe to our mailing list

indicates required
Email Format

comments powered by Disqus