Docker Inc, have released initial versions of their Machine, Swarm and Compose tool set for orchestrating Docker-based distributed applications. The Docker blog states that the current releases are not yet production-ready, but feedback from the community is being requested.
The Docker blog proposes that developers require distributed applications to be portable across development, test and production environments; portable across providers, such as different cloud platforms or private data center deployments; and composable, allowing an application to be split into multiple services. The beta release of Machine, Swarm and Docker are first steps in addressing all of these issues using the Docker ecosystem.
Machine enables provisioning of the Docker engine on local machines, private data centers and cloud providers, and also configures a local Docker client to talk securely (via TLS) to the engine once it has been deployed. Machine provides an abstraction over the deployment platform, and allows the Docker engine to be deployed with a single command, from “zero-to-Docker”, regardless of the target environment.
The beta release of Machine supports twelve environment providers, such as Amazon EC2 and Microsoft Azure, and there are open pull-requests on the Machine Github repository for nine additional providers. The Docker blog states that Machine currently supports lightweight management of machines (such as starting and stopping), the ability to run remote commands or log in to the machines via SSH, and the ability to upgrade the Docker Engine when a new version is released.
Swarm provides native clustering for Docker containers. It pools together several Docker Engines and exposes them as a single virtual Docker Engine. It provides the standard Docker API, and therefore the Docker client or any third party tool, such as Dokku or Shipyard, will transparently scale up to multiple hosts.
Swarm ships as a standard Docker image with no external infrastructure dependencies, and can be started by running a local command to create a cluster and start Swarm, and then running a command to join the cluster on each host where the Docker Engine is running. Swarm is capable of managing resources, and can place and move containers within a cluster as required.
Constraints can also be provided to Swarm for specific container requirements, such as running a MySQL container only on a host with flash storage. Placement relationships between containers can also be provided by specifying ‘affinities’. For example, requiring that two CPU intensive containers do not get placed on the same physical host.
There are several proposed additions to Swarm before it will be productions ready. For example, Swarm is not currently capable of rescheduling containers upon host failure, which will be required for running applications in a fault-tolerant manner. Swarm also currently operates in a single master mode, which is not suitable for running in a high availability environment. There is also planned work to allow components within Swarm to be swappable, such as the scheduler.
Compose is an orchestration tool that enables the defining and running of multi-container distributed applications with Docker. Compose will be based on Fig, an existing tool for running development environments with Docker, and will allow the definition of an application’s components within a single file. These components can include the containers, the container configuration, links and volumes.
Compose has commands for managing the complete development lifecycle of a containerised application, allowing services to be started, stopped and rebuilt. The status of running services can also be viewed, as can the log output, and one-off commands can be run on a service. The roadmap for Compose includes adding support for test, staging and production environments; integration with Swarm; support for applications spanning multiples teams and image registries; and further enhancement to automate the development container build process.
The announcement of the beta release of Machine, Swarm and Compose can be found on the Docker blog. Machine, Swarm and Compose can be downloaded via the Docker website. Docker Inc, are requesting feedback on the high-level design of current tool releases via the docker-dev mailing list, and feedback for individual projects can be supplied to the appropriate Docker tool Github repository.