Note: This blog post is related to the legacy Containership Platform and the content is no longer relevant.

Services like Amazon ECS let you run Docker containers on a server cluster, but ECS gives you no control over how or where those containers are placed across the cluster.

Why does placement matter?

Application Specific Hardware Configuration

Forcing certain applications to live on servers with a special hardware configuration is often a requirement.

One example is a large group of servers with tons of RAM you would like to run Memcached on. You need to be able to force your Memcache application to only launch containers on these specific servers.

Another example is the case where you have a SAN or a large amount of local storage on a group of servers that you are storing user uploaded content on. You need to be able to ensure that your service gets deployed to the right machines to make use of the hardware.

With other solutions this is not possible or requires you to jump through hoops, but ContainerShip makes it easy.

Equal Distribution Across Multiple Data Centers

Often it is desirable to be able to evenly distribute the containers for an application across multiple data centers for high availability. This is important for various reasons:

When load balancing you want to send traffic to containers that live in the same data center and avoid cross-zone data transfer charges.

If one of the data centers goes down or has a failure, you want to ensure that you have containers for each application in another healthy data center.

Apps That Need One Container On Every Follower

When you’re running everything in your infrastructure as a container, there is going to come a point where you will need to launch something that needs to run on every server in the cluster.

Logging agents: Rsyslogd, Logstash forwarder, DataDog

Monitoring agents: Sensu, nagios-nrpe

Metrics collection: Collectd, cAdvisor, New Relic

When you are not able to do this, it forces you to run these tools outside of containers, or manage them in a completely different way than the rest of your apps. They become another one-off custom deployment that you need to automate yourself with configuration management, and properly communicate about and train your team on.

ContainerShip Tags System

The ContainerShip tags system makes it easy to force placement of an application’s containers based on metadata associated with your follower hosts.

Tags being automatically set on follower hosts