Skip to content

Instantly share code, notes, and snippets.

@ds0nt
Created October 13, 2015 14:50
Show Gist options
  • Save ds0nt/cb9b5ea563e5d8ffa919 to your computer and use it in GitHub Desktop.
Save ds0nt/cb9b5ea563e5d8ffa919 to your computer and use it in GitHub Desktop.
#!/bin/bash
can_base() {
_base=`pwd`/$1
}
can_container() {
local name="$1"
local image="$2"
_name=$name
_image=$image
_command=
_context="$_base/$name"
mkdir -p "$_context"
echo -n "" > "$_context/env"
echo -n "" > "$_context/ports"
echo -n "" > "$_context/open_ports"
}
can_volume() {
local volume="$1"
mkdir -p "$_context$volume"
}
can_environment() {
local variable="$1"
local value="$2"
echo "$variable=$value" >> "$_context/env"
}
can_volumes() {
# recurses directory tree taking only the most distant leafs /db/data will not return /db
dirmax=`pwd`
local volumes=$(cd $_context; ls ** -R | grep ":" | sort -r | sed -e "s/://g" | while read x; do
if ! echo $dirmax | grep $x 1>/dev/null; then
dirmax=$(echo $x)
echo $dirmax
fi
done; cd - 1>/dev/null)
for volume in $volumes; do
echo -v $_context/$volume:/$volume
done | xargs echo
}
can_envfile() {
echo --env-file=\"$_context/env\"
}
can_port() {
local port=$1
echo "$port" >> "$_context/ports"
}
can_open_port() {
local port=$1
echo "$port" >> "$_context/open_ports"
}
can_ports () {
for port in $(cat "$_context/ports" | xargs); do
echo -p $port
done | xargs echo
}
can_open_ports () {
for port in $(cat "$_context/open_ports" | xargs); do
echo -p $port:$port
done | xargs echo
}
can_cp() {
docker run --name=tmp-$_name $_image sh
docker cp $1 tmp-$_name:$2
_image=$(docker commit tmp-$_name)
docker rm tmp-$_name
}
can_cmd() {
_command=$1
}
can_dae() {
docker stop $_name
docker rm $_name
docker start $_name 2>/dev/null || docker run -d $(can_volumes) $(can_envfile) $(can_open_ports) --name=$_name $_image $_command
}
can_i_have_port() {
port=$1
docker port $_name | grep $port | cut -d\: -f2
}
set -v
can_base .docker
can_container markdown-mysql orchardup/mysql
can_environment MYSQL_DATABASE markdown-mysql
can_port 3306
can_volume "/data"
can_dae
mysql_port=$(can_i_have_port 3306)
can_container markdown-redis redis
can_port 6379
can_volume "/data"
can_dae
redis_port=$(can_i_have_port 6379)
can_container markdown-app alpine
can_environment REDIS_SERVER markdown-redis:$redis_port
can_environment MYSQL_CONNECTION_STRING "root@(markdown-mysql:$mysql_port)/markdown-mysql?charset=utf8&parseTime=True"
can_port 8080
can_port 5000
can_cp . /app
can_cmd app/markdown
can_dae
http_port=$(can_i_have_port 8080)
api_port=$(can_i_have_port 5000)
can_container markdown-proxy dockerfile/haproxy
can_volume "/haproxy-override"
can_open_port 80
can_open_port 5000
tee > .docker/markdown-proxy/haproxy-override/haproxy.cfg <<\
___________
global
daemon
maxconn 4096
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:80
bind *:5000
acl is_web url_port 80
acl is_api url_port 5000
use_backend web if is_web
use_backend api if is_api
backend web
balance roundrobin
option httpclose
option forwardfor
server s2 127.0.0.1:$http_port maxconn 32
backend api
balance roundrobin
option httpclose
option forwardfor
server s1 127.0.0.1:$api_port maxconn 32
listen admin
bind 127.0.0.1:8080
stats enable
___________
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment