package module
Version: v3.0.0+incompatible Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Sep 6, 2015 License: Apache-2.0 Imports: 3 Imported by: 71



Composable Docker Management

Shipyard enables multi-host, Docker cluster management. It uses Docker Swarm for cluster resourcing and scheduling.

Quick Start

Option 1: Shipyard Deploy

This will launch an entire stack. It uses Docker Machine and the Docker CLI to create a Docker Swarm. It will then deploy Shipyard to manage the Swarm. When it is finished, Shipyard will be configured to manage the Swarm and be ready to go.

Shipyard Deploy can use any provider supported by Docker Machine

Deploy using the VirtualBox Provider

Note: you must have VirtualBox installed.

curl -s | bash -s

For full options:

curl -s | bash -s -- -h

Option 2: Manual Deployment (advanced users)


Full docs are available at


There are three components to Shipyard:


The Shipyard controller talks to a RethinkDB instance for data storage (user accounts, engine addresses, events, etc). It also serves the API and web interface (see below). The controller uses Citadel to communicate to each host and handle cluster events.


Everything in Shipyard is built around the Shipyard API. It enables actions such as starting, stopping and inspecting containers, adding and removing engines and more. It is a very simple RESTful JSON based API.


The Shipyard UI is a web interface to the Shipyard cluster. It uses the Shipyard API for all interaction. It is an AngularJS app that is served via the Controller.



To get a development environment you will need:

  • Go 1.4+
  • Node.js: (npm for bower to build the Angular frontend)

Run the following:

  • install Godep: go get
  • run npm install -g bower to install bower
  • run make build to build the binary
  • run make media to build the media
  • run ./controller -h for options


Shipyard is licensed under the Apache License, Version 2.0. See LICENSE for full license text.




This section is empty.


This section is empty.


This section is empty.


type ClusterInfo

type ClusterInfo struct {
	Cpus           float64 `json:"cpus,omitempty"`
	Memory         float64 `json:"memory,omitempty"`
	ContainerCount int     `json:"container_count,omitempty"`
	EngineCount    int     `json:"engine_count,omitempty"`
	ImageCount     int     `json:"image_count,omitempty"`
	ReservedCpus   float64 `json:"reserved_cpus,omitempty"`
	ReservedMemory float64 `json:"reserved_memory,omitempty"`
	Version        string  `json:"version,omitempty"`

type ConsoleSession

type ConsoleSession struct {
	ID          string `json:"id,omitempty" gorethink:"id,omitempty"`
	ContainerID string `json:"container_id,omitempty" gorethink:"container_id,omitempty"`
	Token       string `json:"token,omitempty" gorethink:"token,omitempty"`

type Event

type Event struct {
	Type          string                      `json:"type,omitempty"`
	ContainerInfo *dockerclient.ContainerInfo `json:"container_info,omitempty"`
	Time          time.Time                   `json:"time,omitempty"`
	Message       string                      `json:"message,omitempty"`
	Username      string                      `json:"username,omitempty"`
	Tags          []string                    `json:"tags,omitempty"`

type Node

type Node struct {
	ID             string   `json:"id,omitempty" gorethink:"id,omitempty"`
	Name           string   `json:"name,omitempty" gorethink:"name,omitempty"`
	Addr           string   `json:"addr,omitempty" gorethink:"addr,omitempty"`
	Containers     string   `json:"containers,omitempty"`
	ReservedCPUs   string   `json:"reserved_cpus,omitempty"`
	ReservedMemory string   `json:"reserved_memory,omitempty"`
	Labels         []string `json:"labels,omitempty"`
	ResponseTime   float64  `json:"response_time" gorethink:"response_time,omitempty"`

type Registry

type Registry struct {
	ID   string `json:"id,omitempty" gorethink:"id,omitempty"`
	Name string `json:"name,omitempty" gorethink:"name,omitempty"`
	Addr string `json:"addr,omitempty", gorethink:"addr,omitempty"`
	// contains filtered or unexported fields

func NewRegistry

func NewRegistry(id, name, addr string) (*Registry, error)

func (*Registry) DeleteRepository

func (r *Registry) DeleteRepository(name string) error

func (*Registry) Repositories

func (r *Registry) Repositories() ([]*registry.Repository, error)

func (*Registry) Repository

func (r *Registry) Repository(name string) (*registry.Repository, error)

type Usage

type Usage struct {
	ID              string  `json:"id,omitempty"`
	Version         string  `json:"version,omitempty"`
	NumOfEngines    int     `json:"num_of_engines,omitempty"`
	NumOfImages     int     `json:"num_of_images,omitempty"`
	NumOfContainers int     `json:"num_of_containers,omitempty"`
	TotalCpus       float64 `json:"total_cpus,omitempty"`
	TotalMemory     float64 `json:"total_memory,omitempty"`

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL