If you have not tried Docker, you should. The sheer power it puts in your hands and the simplicity of the user experience will just wow you. In this post, I will show you how to start a one node Mesos setup with Docker compose.
Docker announced compose on February 26th. Compose allows you to describe a multi-container setup and manage it with one binary docker-compose. The containers and volumes combinations managed by Compose are defined in a YAML file, super easy to read and super easy to write. The UX is very similar to the Docker CLI.
When compose was released, I tried it and was a bit underwhelmed, as it is basically a relooking of Fig. This is not unexpected as Docker Inc, acquired Orchard the makers of Fig. But I was expecting more added functionality and even a tighter integration with the Docker client (something a devbranch actually prototyped), even a common release instead of a separate binary. I am sure this will come.
As I am writing the docker cookbook, I have deployed Wordpress 20 different ways, and it's getting a bit boring ! I was looking for more information on Mesos and its support for Docker, I re-read a terrific blog post that showed how to start a Mesos setup (zookeeper, master, slave, marathon framework) in 7 commands. Can't beat that.
When I re-read this post, I automatically thought this was an exciting use case for docker-compose. One YAML file to start Mesos/Zookeeper/Marathon and experiment with it. Of course I am not talking about a production multi-node setup. I am just looking at it for an easy Mesos experiment.
I will spare you the details of installing compose (just a curl away). The dockers docs are great.
So here is the YAML file describing our Mesos setup:
zookeeper: image: garland/zookeeper ports: - "2181:2181" - "2888:2888" - "3888:3888" mesosmaster: image: garland/mesosphere-docker-mesos-master ports: - "5050:5050" links: - zookeeper:zk environment: - MESOS_ZK=zk://zk:2181/mesos - MESOS_LOG_DIR=/var/log/mesos - MESOS_QUORUM=1 - MESOS_REGISTRY=in_memory - MESOS_WORK_DIR=/var/lib/mesos marathon: image: garland/mesosphere-docker-marathon links: - zookeeper:zk - mesosmaster:master command: --master zk://zk:2181/mesos --zk zk://zk:2181/marathon ports: - "8080:8080" mesosslave: image: garland/mesosphere-docker-mesos-master:latest ports: - "5051:5051" links: - zookeeper:zk - mesosmaster:master entrypoint: mesos-slave environment: - MESOS_HOSTNAME=192.168.33.10 - MESOS_MASTER=zk://zk:2181/mesos - MESOS_LOG_DIR=/var/log/mesos - MESOS_LOGGING_LEVEL=INFO
Launch this with:
$ ./docker-compose up -d Recreating vagrant_zookeeper_1... Recreating vagrant_mesosmaster_1... Recreating vagrant_marathon_1... Recreating vagrant_mesosslave_1...
And open your browser at http://IP_HOST:5050 then follow the rest of the blog to start a task in marathon.
Bottom line, I went from '7 commands to Mesos' to '1 command to Mesos' thanks to Docker-compose and a fairly simple YAML file. Got to love it. When compose can do this across Docker hosts in a Docker Swarm started by Machine. Then the real fun will begin !