Created
October 13, 2015 14:50
-
-
Save ds0nt/cb9b5ea563e5d8ffa919 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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