Automatic Docker Deployment via Webhooks
Switch branches/tags
Nothing to show
Clone or download
schickling Merge pull request #13 from karate/master
Set AuthToken as an environment variable. Fixes #12
Latest commit 64d2794 Oct 19, 2017

README.md

docker-hook

Automatic Docker Deployment via Webhooks

docker-hook listens to incoming HTTP requests and triggers your specified command.

Features

  • No dependencies
  • Super lightweight
  • Dead simple setup process
  • Authentification support

Setup

1. Prepare Your Server

Download docker-hook

No worries - it just downloads a Python script. There won't be anything installed or written elsewhere.

$ curl https://raw.githubusercontent.com/schickling/docker-hook/master/docker-hook > /usr/local/bin/docker-hook; chmod +x /usr/local/bin/docker-hook

Start docker-hook

$ docker-hook -t <auth-token> -c <command>
Auth-Token

Please choose a secure auth-token string or generate one with $ uuidgen. Keep it safe or otherwise other people might be able to trigger the specified command. You can pass the auth-token as a command line argument, or set it as an environment variable.

Command

The command can be any bash command of your choice. See the following example. This command will be triggered each time someone makes a HTTP request.

2. Configuration On Docker Hub

Add a webhook like on the following image. example.com can be the domain of your server or its ip address. docker-hook listens to port 8555. Please replace my-super-safe-token with your auth-token.

Example

This example will stop the current running yourname/app container, pull the newest version and start a new container.

$ docker-hook -t my-super-safe-token -c sh ./deploy.sh

If you want to store the authentication token as an environment variable, then run

# Make sure there is no space before or after the `=` sign
$ export DOCKER_AUTH_TOKEN=<my-super-safe-token>
$ docker-hook -c sh ./deploy.sh

deploy.sh

#! /bin/bash

IMAGE="yourname/app"
docker ps | grep $IMAGE | awk '{print $1}' | xargs docker stop
docker pull $IMAGE
docker run -d $IMAGE

You can now test it by pushing something to yourname/app or by running the following command where yourdomain.com is either a domain pointing to your server or just its ip address.

$ curl -X POST yourdomain.com:8555/my-super-safe-token

How it works

docker-hook is written in plain Python and does have no further dependencies. It uses BaseHTTPRequestHandler to listen for incoming HTTP requests from Docker Hub and then executes the provided command if the authentification was successful.

Caveat

This tool was built as a proof-of-concept and might not be completly secure. If you have any improvement suggestions please open up an issue.

License

MIT License