README ¶
Using Docker Swarm and Mesos
Swarm comes with a built-in scheduler that works with the swarm manager to schedule container resources. You can completely replace the built-in scheduler with a 3rd party scheduler. For example, you can replace it with the Mesos scheduler as described here.
When using Docker Swarm and Mesos, you use the Docker client to ask the swarm manager to schedule containers. The swarm manager then schedules those containers on a Mesos cluster.
Prerequisites
Each node in your swarm must run a Mesos slave. The slave must be capable of starting tasks in a Docker Container using the --containerizer=docker
option.
You need to configure two TCP ports on the slave. One port to listen for the swarm manager, for example 2375. And a second TCP port to listen for the Mesos master, for example 3375.
Start the Docker Swarm manager
If you use a single Mesos master:
docker run -d -p <swarm_port>:2375 -p 3375:3375 swarm manage -c mesos-experimental --cluster-opt mesos.address=<public_machine_ip> --cluster-opt mesos.port=3375 <mesos_master_ip>:<mesos_master:port>
If you use multiple Mesos masters:
docker run -d -p <swarm_port>:2375 -p 3375:3375 swarm manage -c mesos-experimental --cluster-opt mesos.address=<public_machine_ip> --cluster-opt mesos.port=3375 zk://<mesos_masters_url>
Once the manager is running, check your configuration by running docker info
as follows:
docker -H tcp://<manager_ip:manager_port> info
For example, if you run the manager locally on your machine:
Containers: 0
Offers: 2
Offer: 20150609-222929-1327399946-5050-14390-O6286
└ cpus: 2
└ mem: 1006 MiB
└ disk: 34.37 GiB
└ ports: 31000-32000
Offer: 20150609-222929-1327399946-5050-14390-O6287
└ cpus: 2
└ mem: 1006 MiB
└ disk: 34.37 GiB
└ ports: 31000-32000
Documentation ¶
Index ¶
- func NewCluster(scheduler *scheduler.Scheduler, store *state.Store, TLSConfig *tls.Config, ...) (cluster.Cluster, error)
- type Cluster
- func (c *Cluster) BuildImage(buildImage *dockerclient.BuildImage, out io.Writer) error
- func (c *Cluster) Container(IDOrName string) *cluster.Container
- func (c *Cluster) Containers() cluster.Containers
- func (c *Cluster) CreateContainer(config *cluster.ContainerConfig, name string) (*cluster.Container, error)
- func (c *Cluster) Disconnected(mesosscheduler.SchedulerDriver)
- func (c *Cluster) Error(d mesosscheduler.SchedulerDriver, msg string)
- func (c *Cluster) ExecutorLost(mesosscheduler.SchedulerDriver, *mesosproto.ExecutorID, *mesosproto.SlaveID, ...)
- func (c *Cluster) FrameworkMessage(mesosscheduler.SchedulerDriver, *mesosproto.ExecutorID, *mesosproto.SlaveID, ...)
- func (c *Cluster) Handle(e *cluster.Event) error
- func (c *Cluster) Image(IDOrName string) *cluster.Image
- func (c *Cluster) Images() []*cluster.Image
- func (c *Cluster) Import(source string, repository string, tag string, imageReader io.Reader, ...)
- func (c *Cluster) Info() [][]string
- func (c *Cluster) Load(imageReader io.Reader, callback func(where, status string))
- func (c *Cluster) OfferRescinded(mesosscheduler.SchedulerDriver, *mesosproto.OfferID)
- func (c *Cluster) Pull(name string, authConfig *dockerclient.AuthConfig, ...)
- func (c *Cluster) RANDOMENGINE() (*cluster.Engine, error)
- func (c *Cluster) RegisterEventHandler(h cluster.EventHandler) error
- func (c *Cluster) Registered(driver mesosscheduler.SchedulerDriver, fwID *mesosproto.FrameworkID, ...)
- func (c *Cluster) RemoveContainer(container *cluster.Container, force bool) error
- func (c *Cluster) RemoveImage(image *cluster.Image) ([]*dockerclient.ImageDelete, error)
- func (c *Cluster) RemoveImages(name string) ([]*dockerclient.ImageDelete, error)
- func (c *Cluster) RenameContainer(container *cluster.Container, newName string) error
- func (c *Cluster) Reregistered(mesosscheduler.SchedulerDriver, *mesosproto.MasterInfo)
- func (c *Cluster) ResourceOffers(_ mesosscheduler.SchedulerDriver, offers []*mesosproto.Offer)
- func (c *Cluster) SlaveLost(mesosscheduler.SchedulerDriver, *mesosproto.SlaveID)
- func (c *Cluster) StatusUpdate(_ mesosscheduler.SchedulerDriver, taskStatus *mesosproto.TaskStatus)
- func (c *Cluster) TotalCpus() int64
- func (c *Cluster) TotalMemory() int64
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Cluster ¶
type Cluster struct { sync.RWMutex TLSConfig *tls.Config // contains filtered or unexported fields }
Cluster struct for mesos
func (*Cluster) BuildImage ¶ added in v0.4.0
func (c *Cluster) BuildImage(buildImage *dockerclient.BuildImage, out io.Writer) error
BuildImage build an image
func (*Cluster) Containers ¶
func (c *Cluster) Containers() cluster.Containers
Containers returns all the containers in the cluster.
func (*Cluster) CreateContainer ¶
func (c *Cluster) CreateContainer(config *cluster.ContainerConfig, name string) (*cluster.Container, error)
CreateContainer for container creation in Mesos task
func (*Cluster) Disconnected ¶
func (c *Cluster) Disconnected(mesosscheduler.SchedulerDriver)
Disconnected method
func (*Cluster) Error ¶
func (c *Cluster) Error(d mesosscheduler.SchedulerDriver, msg string)
Error method
func (*Cluster) ExecutorLost ¶
func (c *Cluster) ExecutorLost(mesosscheduler.SchedulerDriver, *mesosproto.ExecutorID, *mesosproto.SlaveID, int)
ExecutorLost method
func (*Cluster) FrameworkMessage ¶
func (c *Cluster) FrameworkMessage(mesosscheduler.SchedulerDriver, *mesosproto.ExecutorID, *mesosproto.SlaveID, string)
FrameworkMessage method
func (*Cluster) Import ¶
func (c *Cluster) Import(source string, repository string, tag string, imageReader io.Reader, callback func(what, status string))
Import image
func (*Cluster) Info ¶
Info gives minimal information about containers and resources on the mesos cluster
func (*Cluster) OfferRescinded ¶
func (c *Cluster) OfferRescinded(mesosscheduler.SchedulerDriver, *mesosproto.OfferID)
OfferRescinded method
func (*Cluster) Pull ¶
func (c *Cluster) Pull(name string, authConfig *dockerclient.AuthConfig, callback func(where, status string))
Pull will pull images on the cluster nodes
func (*Cluster) RANDOMENGINE ¶
RANDOMENGINE returns a random engine.
func (*Cluster) RegisterEventHandler ¶
func (c *Cluster) RegisterEventHandler(h cluster.EventHandler) error
RegisterEventHandler registers an event handler.
func (*Cluster) Registered ¶
func (c *Cluster) Registered(driver mesosscheduler.SchedulerDriver, fwID *mesosproto.FrameworkID, masterInfo *mesosproto.MasterInfo)
Registered method for registered mesos framework
func (*Cluster) RemoveContainer ¶
RemoveContainer to remove containers on mesos cluster
func (*Cluster) RemoveImage ¶
func (c *Cluster) RemoveImage(image *cluster.Image) ([]*dockerclient.ImageDelete, error)
RemoveImage removes an image from the cluster
func (*Cluster) RemoveImages ¶
func (c *Cluster) RemoveImages(name string) ([]*dockerclient.ImageDelete, error)
RemoveImages removes images from the cluster
func (*Cluster) RenameContainer ¶
RenameContainer Rename a container
func (*Cluster) Reregistered ¶
func (c *Cluster) Reregistered(mesosscheduler.SchedulerDriver, *mesosproto.MasterInfo)
Reregistered method for registered mesos framework
func (*Cluster) ResourceOffers ¶
func (c *Cluster) ResourceOffers(_ mesosscheduler.SchedulerDriver, offers []*mesosproto.Offer)
ResourceOffers method
func (*Cluster) SlaveLost ¶
func (c *Cluster) SlaveLost(mesosscheduler.SchedulerDriver, *mesosproto.SlaveID)
SlaveLost method
func (*Cluster) StatusUpdate ¶
func (c *Cluster) StatusUpdate(_ mesosscheduler.SchedulerDriver, taskStatus *mesosproto.TaskStatus)
StatusUpdate method
func (*Cluster) TotalMemory ¶
TotalMemory return the total memory of the cluster