libswarm is a toolkit for composing network services.
It defines a standard interface for services in a distributed system to communicate with each other. This lets you:
- Compose complex architectures from reusable building blocks
- Avoid vendor lock-in by swapping any service out with another
An extensive library of services is included, and you can also write your own using a simple API.
Here are some examples of what you can do with libswarm:
-
Aggregate all your Docker containers across multiple hosts and infrastructure providers, as if they were running on a single host.
-
Bridge your in-house DNS-based service discovery with that new shiny Consul deployment, without getting locked into either.
-
Swap in a new clustering and service discovery system, without changing any application code.
-
Collect logs across an in-house Mesos cluster, a Cloud Foundry deployment and individual servers staggered in 3 different datacenters, forward them to your legacy syslog deployment, then perform custom analytics on them.
-
Simulate your entire service topology in a single process, then scale it out simply by re-arranging adapters.
-
Organize your application as loosely coupled services from day 1, without over-engineering.
You can install libswarm
in a few simple steps. You will need to make
Go installed on your host.
- Download the current source code.
go get github.com/docker/libswarm
- Make sure
$GOPATH/bin
is in your$PATH
export PATH=$GOPATH/bin:$PATH
- Download or update the current dependencies.
cd $GOPATH/src/github.com/docker/libswarm
make deps
NOTE: You may also need bzr
. On OS X, you can install it from
here or via Home
Brew: brew install bzr
. On Debian & Ubuntu, apt-get install bzr
and
on Red Hat et al, yum install bzr
.
- Then compile
swarmd
with:
go install github.com/docker/libswarm/swarmd
If $GOPATH/bin
is in your PATH
, you can invoke swarmd
from the
command line.
$ swarmd -h
NAME:
swarmd - Compose distributed systems from lightweight services
USAGE:
swarmd [global options] command [command options] [arguments...]
VERSION:
0.0.1
COMMANDS:
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--version, -v print the version
--help, -h show help
Maintainer: Ben Firshman
This service runs a Docker remote API server, allowing the Docker client
and other Docker tools to control libswarm services. With no arguments,
it listens on port 4243
, but you can specify any port you like using
tcp://0.0.0.0:9999
, unix:///tmp/docker
etc.
Maintainer: Aanand Prasad
This service can be used to control a Docker Engine from libswarm
services. It takes one argument, the Docker host to connect to. For
example: dockerclient tcp://10.1.2.3:4243
Help wanted!
Help wanted!
Help wanted!
Help wanted!
Clayton Coleman
Solomon Hykes
Help wanted!
Brian Goff
Help wanted!
Brendan Burns
John Hopper
Maintainer: Aanand Prasad
Control an Orchard host from libswarm. It takes two arguments, an Orchard API token and the name of the Orchard host to control.
Aaron Feng
Help wanted!
Help wanted!
Help wanted!
Help wanted!
Help wanted!
The debug service simply catches all messages and prints them on the terminal for inspection.
The libswarm library ships with a simple daemon which can control services in your distributed system.
Run swarmd without arguments to list available services:
swarmd
Pass a service name as argument to load it:
swarmd fakeclient
You can pass arguments to the service, like a shell command:
swarmd 'dockerserver tcp://localhost:4243'
You can call multiple services. They will be executed in parallel, with
the output of each backend connected to the input of the next, just like
unix
pipelines.
This allows for very powerful composition.
swarmd 'dockerserver tcp://localhost:4243' 'debug' 'dockerclient unix:///var/run/docker.sock'
Solomon Hykes
Code and documentation copyright 2013-2014 Docker, inc. Code released under the Apache 2.0 license. Docs released under Creative commons.