Skip to content

Instantly share code, notes, and snippets.

@kballenegger
Last active September 23, 2015 01:18
Show Gist options
  • Save kballenegger/43c9ddcd94ba625d3ccd to your computer and use it in GitHub Desktop.
Save kballenegger/43c9ddcd94ba625d3ccd to your computer and use it in GitHub Desktop.
Docker service lifecycle
#!/bin/bash
cd /repos/api-internal
case "$2" in
pre-start)
git checkout origin/production
docker pull quay.io/kballenegger/api-internal
docker pull quay.io/kballenegger/api-internal-builder
# remove any left-over container
docker ps -a | grep api-internal.$1 && docker rm api-internal.$1
docker ps -a | grep api-internal-builder.$1 && docker rm api-internal-builder.$1
# build script
build_cmd=$(cat <<CMD
set -e
echo "Building api-internal.$1".
bundle install --deployment --without="test development"
echo "Running migrations."
postgresurl=\$(bundle exec ruby -r./init.rb -e \
'require "konfiguration"; puts Konfiguration.database(:uri)')
bundle exec sequel -E -m migrations \$postgresurl
echo "Built api-internal.$1".
CMD
)
docker run \
-d \
-v /repos/api-internal:/app \
-e env=live \
--name api-internal-builder.$1 \
quay.io/kballenegger/api-internal-builder \
bash -l -c "$build_cmd"
code=$(docker wait api-internal-builder.$1)
echo "Exited with code $code"...
exit $code
;;
start)
# launch script
app_cmd=$(cat <<CMD
set -e
echo "Launching api-internal.$1".
bundle exec thin -R config.ru -p 9977 start
echo "Exiting api-internal.$1".
CMD
)
docker run \
-d \
-p 9977:9977 \
-v /repos/api-internal:/app \
-e env=live \
--name api-internal.$1 \
quay.io/kballenegger/api-internal \
bash -l -c "$app_cmd"
code=$(docker wait api-internal.$1)
echo "Exited with code $code"...
exit $code
;;
stop)
docker stop api-internal.$1
docker rm api-internal.$1
;;
deploy)
bash $(dirname "$0")/../shared/deploy.sh api-internal $1
;;
*)
echo "Usage: ..."
exit 1
;;
esac
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment