Skip to content

Latest commit

 

History

History
225 lines (148 loc) · 7.19 KB

README.md

File metadata and controls

225 lines (148 loc) · 7.19 KB

Depcon (Container Deployment)

Build Status release GoDoc Join the chat at https://gitter.im/ContainX/community

An advanced deployment tool for docker containers against Mesos/Marathon, Kubernetes and Amazon ECS

For full up to date documentation and usage please see:

Overview

Depcon makes managing clusters that run docker containers a breeze. It offers the ability to define environments such as test, pre-prod, production against Marathon (initial release), Kubernetes and Amazon ECS.

Some key features of Depcon are:

  • Variable interpolation in deployment descriptors
  • Output results in Column, YAML and JSON formats for easy integration with automation
  • Accepts deployment descriptors in either JSON or YAML format
  • Full Mesos/Marathon support
    • Application, Group & Task management
    • Partial application updates: CPU, Memory & Scaling
    • Quick application rollback
    • Leader election, Server info and elapsed response
  • Docker compose support
    • Supports all major operating systems
    • Works with Docker Machine aka Boot2Docker
    • Parameter support -- ${PARAMS} can be placed in compose files
  • Future releases will offer a proposed Open Deployment Descriptor format which will allow Depcon to deploy a common descriptor against Marathon, Kubernetes, ECS and Docker Swarm.
  • Ability to wait until a new or updated container deployment is healthy

Binary Installation

Binaries are available through GitHub releases. You can download the appropriate binary, package and version from the Releases page

Build and Install the Binaries from Source

Pre-Requisites

  • GOLANG 1.6+

Add Depcon and its package dependencies to your go src directory

go get -v github.com/ContainX/depcon

Once the get has completed, you should find your new depcon (or depcon.exe) executable sitting inside the $GOPATH/bin/

To update Depcon's dependencies, use go get with the -u option.

go get -u -v github.com/ContainX/depcon

Running Depcon in Docker

With each release we publish a very small docker image containing depcon.

Quick Example

# Run depcon in the background capture cid, add alias
$ cid=$(docker run -itd -v $PWD:/data pacesys/depcon)
$ alias depcon="docker exec -it ${cid} depcon"

# Use depcon like it was native
$ depcon app list

For additional instructions in testing depcon within docker (useful for CI systems) see the docker hub repository at: https://hub.docker.com/r/pacesys/depcon/

Global options in Depcon

Output Options

Depcon makes it easy to integrate with third party systems. Any command or query in depcon has the options to list results in tabular, json or yaml formats.

For example: depcon app list -o json would return a list of running applications in JSON form. You can also use -o yaml for yaml or no option which by default results in table/tabular form.

Using Depcon with Mesos/Marathon

Applications

Below are examples with application managements

Listing deployed applications

List all applications

$ depcon app list

Getting details about a running application by it's ID

Gets an application details by Id

$ depcon app get myapp

Destroy/Delete a running application

Remove an application [applicationId] and all of it's instances

$ depcon app destroy myapp

Scale an Application

Scales [appliationId] to total [instances]

$ depcon app scale myapp 2

Restart a running application

Restarts an application by Id

$ depcon app restart myapp

Update a running application

// Update CPU resources
$ depcon app update cpu myapp 0.5

// Update Memory to 400mb
$ depcon app update mem myapp 400

Using Depcon as a Docker Compose client

Depcon supports Docker Compose natively on all major operating systems. This feature is currently in beta, please report any found issues.

Available Docker Compose Actions

$ depcon compose

Usage:
  depcon compose [command]

Available Commands:
  build       Build or rebuild services
  kill        Kill containers
  logs        View output from containers
  port        Stops services
  ps          List containers
  up          Create and start containers
  pull        Pulls service imagess
  restart     Restart running containers
  rm          Remove stopped containers
  start       Start services
  stop        Stops services
  up          Create and start containers

Flags:
      --compose-file="docker-compose.yml": Docker compose file
  -h, --help[=false]: help for compose
      --name="depcon_proj": Project name for this composition


Global Flags:
  -e, --env="": Specifies the Environment name to use (eg. test | prod | etc). This can be omitted if only a single environment has been defined
  -o, --output="column": Specifies the output format [column | json | yaml]
      --verbose[=false]: Enables debug/verbose logging


Use "depcon compose [command] --help" for more information about a command.

The examples below assume docker-compose.yml is found in the execution directory. If the compose file is located in another location then the global --compose-file flag can be invoked.

Creating and Starting containers

$ depcon compose up

Creating and Starting a specific service

$ depcon compose up redis

Stopping compose services

$ depcon compose kill

Using parameters within Compose templates

Depcon offers extenability on top of tradditional Docker compose. It allows params to be placed within compose files in the format of ${PARAM}. Depcon allows these params to be resolved via the flag --param PARAM=value during use or via exported env variables.

Take a look at the samples/docker-compose-params.yml in Depcon source repo. Here's an example of params using the referenced sample compose file.

// Inline params
$ depcon compose up redis --compose-file samples/docker-compose-params.yml -p REDIS_PORT=6379

// As env variables
$ export REDIS_PORT=6379
$ depcon compose up redis --compose-file samples/docker-compose-params.yml

License

This software is licensed under the Apache 2 license, quoted below.

Copyright 2016 Jeremy Unruh

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.