Manifest File Specification

The Vessel manifest file is stored in YAML format and is comprised of four distinct areas: docker, containers, ssh and vagrant. The following document details the available attributes in each section and their intended use. In addition to the attribute level details for each section, an example manifest is located at the bottom of the document.

Sections

Each section is a top-level attribute in the YAML file. The format of each section varies with the type of information that they contain.

containers

The containers section is a list of Docker container definitions. The following attribute table defines the attributes of each object in the containers list.

Attribute Description Required Default Example
name The name of the container Yes MyApp
category A category name for the container. Containers designated as Low-Level will show up on the right side list, while all others will show up on the left. No API
cpuShares Specify the docker CPU shares value No
dependencies A list of containers that this container is dependent upon. Specifying dependencies will ensure the dependency is started before this container. If a dependency exposes volumes, this container will automatically use them. No
- consul
  - memcached
  - postgresql
dns Override the default DNS with a specific DNS server for the container No 8.8.4.4
enabled Specify that the container should be enabled on load of the application No false true
env A mapping of key/value pairs to pass in as environment values No
foo: barbaz: qux 
icon The icon to use for the container. See the Container Icons document for available icons. No cube
image The docker image to use. Note the <server> macro replaces the <server> value with the value defined in the docker attributes. Yes <server>/aweber/redis
memory Limit the container to using N bytes of memory No 209715200
memorySwap Limit the container to using N bytes of swap No 209715200
path An optional path to the command that should be run when starting the container No /usr/bin/supervisord
ports A list of ports to make available from the docker container. This can either be a list of integer values or a list of complex Port objects. No
- 8080
- 8081

or

- guest: 8080
  host: 8080
- guest: 8081
  host: 8081
repository Defines the git repository for a project/container. See the Repository definition. No
url: git@github.com:awvessel/vessel.git
branch: master
required Indicates the container is required for all other containers in the manifest unless the container specifies the standalone flag. No false true
standalone Indicates the container should ignore any required containers as dependencies. false true
tags A list of keywords to tag the container with that can be used for searching containers No
- database
- postgresql
user A user to run the container as No www-data
visible Indicates the container should not be visible in the UI but still processed as a dependency of global requirement. No true false
volumes A list of paths to make available from this container to other containers. No
- /var/log/foo
- /etc/bar

Ports Definition

Attribute Description Required Default Example
guest The port to expose from the docker container Yes 8080
guest_ip Bind to a specific guest IP address No 0.0.0.0
host The port to expose on the host Yes 8080
host_ip Bind to a specific host IP address No 0.0.0.0
protocol The socket type for the port (tcp, udp) No tcp tcp

Repository

An optional git repository to clone for the container that will be made available in the container in /opt/source.

Attribute Description Required Default Example
url The URL of the repository to clone Yes https://github.com/awvessel/vessel.git
branch The default branch to select for the clone No master master

docker

Attribute Description Example
server The docker server to use for replacing the server macro in the container image value docker.foo.com

ssh

All SSH attributes are required

Attribute Description Example
key/private The SSH private key to use for access to docker containers ssh-rsa AAAAB ... 0rpLaSn core@awdev
key/public The SSH public key to use for access to docker containers
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAusS3LbsL/fhSP5 ...
-----END RSA PRIVATE KEY-----

Vagrant

All vagrant attributes are required

Attribute Description Example
box The name of the box that will be used coreos-beta
cpu_count The number of CPUs to make available in the VM 2
ram The amount of RAM in KB to make available in the VM 2048
hostname The hostname of the VM awdev
network/type The type of network (one of public, private) private
network/ip The IP address to use for the VM 192.168.1.10
providers A list of provider box definitions See Provider Definition
synced_folders A list of synced folders to make available to the VM See Synced Folders Definition

Provider Definition

Attribute Description Required Example
name The provider name Yes virtualbox
min_version The minimum box version No 324.1.0
url The URL to the box or box manifest Yes http://storage.core-os.net/coreos/amd64-usr/beta/coreos_production_vagrant.json

Synced Folder Definition

Attribute Description Required Example
name The folder/directory name in the environment directory Yes source
mount The VM mount point path Yes /mnt/source
options Optional NFS options No nolock,vers=3,udp

Example

The following is an example of a Vessel manifest file:

%YAML 1.2
---
containers:

  - name: mongodb_data
    image: aweber/mongodata
    standalone: true
    visible: false
    volumes:
      - /var/lib/mongodb

  - name: mysql_data
    image: aweber/mysqldata
    standalone: true
    visible: false
    volumes:
      - /var/lib/mysql

  - name: pgsql_data
    image: aweber/pgdata
    standalone: true
    visible: false
    volumes:
      - /var/lib/postgresql

  - name: redis_data
    image: aweber/redisdata
    standalone: true
    visible: false
    volumes:
      - /var/lib/redis

  - name: Couchbase
    category: Low-Level
    icon: couchbase
    image: aweber/couchbase
    ports:
      - 8091
      - 8092
      - 11210
      - 11211

  - name: Elasticsearch
    category: Low-Level
    icon: elasticsearch
    image: aweber/elasticsearch
    ports:
      - 9200
      - 9300

  - name: Ghost
    category: Application
    icon: nodejs
    image: aweber/ghost
    ports:
      - 2368
    repository:
      url: https://github.com/TryGhost/Ghost.git

  - name: Grafana
    category: Application
    dependencies:
      - Elasticsearch
      - Graphite
    icon: fa-dashboard
    image: aweber/grafana
    ports:
      - 9202

  - name: Graphite
    category: Low-Level
    icon: fa-bar-chart-o
    image: aweber/graphite
    ports:
      - 2003
      - 2004
      - 2005

  - name: InfluxDB
    category: Low-Level
    image: aweber/influxdb
    ports:
      - 8083
      - 8086
      - 8090
      - 8099

  - name: Kibana
    category: Application
    dependencies:
      - Elasticsearch
    icon: elasticsearch
    image: aweber/elasticsearch
    ports:
      - 9201

  - name: Memcached
    category: Low-Level
    icon: memcached
    image: aweber/memcached
    ports:
      - 11211

  - name: MongoDB
    category: Low-Level
    icon: mongodb
    image: aweber/mongodb
    dependencies:
      - mongodb_data
    ports:
      - 27017

  - name: MySQL
    category: Low-Level
    icon: mysql
    image: aweber/mysql
    dependencies:
      - mysql_data
    ports:
      - 3306

  - name: PostgreSQL
    category: Low-Level
    dependencies:
      - pgsql_data
    icon: postgresql
    image: aweber/postgresql
    ports:
      - 5432

  - name: RabbitMQ
    category: Low-Level
    icon: rabbitmq
    image: aweber/rabbitmq
    ports:
      - 1883
      - 4369
      - 5672
      - 15672
      - 25672

  - name: Redis
    category: Low-Level
    icon: redis
    image: aweber/redis
    dependencies:
      - redis_data
    ports:
      - 6379

  - name: StatsD
    category: Low-Level
    icon: nodejs
    image: aweber/statsd
    ports:
      - guest: 8125
        host: 8125
        protocol: udp
      - guest: 8126
        host: 8126
        protocol: tcp

docker:
  server: registry.hub.docker.com

ssh:
  key:
    public:
      ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHpYVjhNAcP46zDXCaFQkahbSxfHXu34XSrXaevrzOwIiU+Lvm505lDQNtjHNniAK5uyBHR20n1LDLhFINbNQeTr0JL4LF1cQf4xigk1u4Cowy94OfcQOU1tBKUHI23qsTRV9wzzFrdiBUZ/B6ACsIZLNQLx6ncMTAZv/QjUh1YuJUAmTJm79la3sAjJkhvnCs7g5w6GXMLYcXDI5Iz/WcN9GI+YyK5TNWknEuk+QfRbp9u/Q95EPW89KemVuuavxN2J/dJJzhEDQpFSTFgRixULhK4O9yHEK/enx8GAIapMqSDXmilnAZsqlyrYnGwuNoc2/BXBUhCic+JZ8i9cAz vessel@public
    private: |
      -----BEGIN RSA PRIVATE KEY-----
      MIIEpAIBAAKCAQEAx6WFY4TQHD+Osw1wmhUJGoW0sXx17t+F0q12nr68zsCIlPi7
      5udOZQ0DbYxzZ4gCubsgR0dtJ9Swy4RSDWzUHk69CS+CxdXEH+MYoJNbuAqMMveD
      n3EDlNbQSlByNt6rE0VfcM8xa3YgVGfwegArCGSzUC8ep3DEwGb/0I1IdWLiVAJk
      yZu/ZWt7AIyZIb5wrO4OcOhlzC2HFwyOSM/1nDfRiPmMiuUzVpJxLpPkH0W6fbv0
      PeRD1vPSnplbrmr8Tdif3SSc4RA0KRUkxYEYsVC4SuDvchxCv3p8fBgCGqTKkg15
      opZwGbKpcq2JxsLjaHNvwVwVIQonPiWfIvXAMwIDAQABAoIBAQCNrZzXXu0A3um5
      jxQVhFANjk0IlzZp6h3hwE+pn9oFLwS+EzXlSsiLVYzVNRLAqfilLXJeowWHepxs
      EN7ZwB1X1LC50AmRs32W02Yqregs1u9fS98QSvcrrLXrxuMGpUXqSxTLzX1YsV+I
      BqrVKUFgl3XYtVefo5s8nttzeI+vHNfs0wAbEvaXJuFKZlvkfVgzFsyjE8FWhHJ4
      r2+E4/3aObLyN21bT1w+8sW+xLAsExdQpe6vnHBJs5Jl8qxuBxpYLOKNgj6nhxR1
      Gypno/64HR2sxxikJB17arPdFe3aH/BqMo3MdSo+ekCXHFPKb5HYm9jmWThnnGol
      vKBvozNhAoGBAO+4510alzHMzd8gFNHdhr+WG3uGtMdj3qciY6n+SJ8RAJuYD40Z
      GmNGycFnho+KL358Q+bAlKrIEzmKALeOQ/Qn3ajPUDk+uCOb7Dak1qXX+1H0AlKn
      nsAF5baLtcKm3Gov1KDmMBhc8S59H226iwPebsw5fJ9wr4UyNMuX3ncPAoGBANUz
      +wLZsXiaBEZrRP4vXCY4lMsuit9py6TPVEbL7fKSOELYCwE2fpyjOFAJOVPfpJUR
      n4MZgmpTIg5cR7Det+gHSrhg4EciK1jEvBPI0u0c3OMPLPc40SAAA8pdoDYpFrk8
      ROmQGxfjTlrT7dOdwkZnqUHIMm3pfEnU8nzbrYSdAoGBAJOOaTtx5qcMvZweDzKu
      /QZoyznZzOT+oEqYbGhy0Ri4Snt7ufbMAOYi6IVXyAgKsvlUXCdpWxlUViEQxSg3
      NbTP5SzHj0XtSUMB8wAfrtAeheAIJnXiH2FrP96BWLwcIYhrMKJpjikw7HQFKJdO
      P8t92w1yRTePETsXkE/Rh2oZAoGAcs+XMKXCaEuoWbOSZ79hREPb/L6HkmAKhioQ
      HD/dV29eVMC6zGBoNjm/LXqKIJyiqJPg7lxiWpeCE3GmOZz2NEEY/8lLfYLtDNSE
      47KVw5JzcOLPOCKkmzLm16cri378+at3AL/VlzuVClxuCjM+V2OjRgVlAsNlZu0B
      2DMEchECgYAs4rHtibhtMwJ5gTeyFIoU448MM3u/G2eQEbso0WyaY46mmdMD3Acz
      Qf1jBeTjjTwjAgQd1jniNu79qLyCaaMedIlLF0dQRQ+od4BNZqCs12cUV+mtsOLw
      vEfg8QcSTXlVLHZ8lNgVrSbvSpmsb5BDkuEM6SimvKK/Wfx8U2AJwg==
      -----END RSA PRIVATE KEY-----

vagrant:
  box: coreos-alpha
  cpu_count: 2
  ram: 2048
  hostname: vessel-public
  network:
    type: private
    ip: 192.168.50.101
  providers:
    - name: virtualbox
      min_version: 402.2.0
      url: http://storage.core-os.net/coreos/amd64-usr/alpha/coreos_production_vagrant.json
    - name: vmware_fusion
      min_version: 402.2.0
      url: http://storage.core-os.net/coreos/amd64-usr/alpha/coreos_production_vagrant_vmware_fusion.json
  synced_folders:
    - name: scripts
      mount: /home/core/bin
    - name: source
      mount: /mnt/source