Skip to content

Instantly share code, notes, and snippets.

@kphrx
Last active June 29, 2021 14:09
Show Gist options
  • Save kphrx/cef9be30afb824eec2d2a22ae8c19583 to your computer and use it in GitHub Desktop.
Save kphrx/cef9be30afb824eec2d2a22ae8c19583 to your computer and use it in GitHub Desktop.
docker container rolling update script with docker-compose. service name: "web"
#!/bin/sh
OLD_CONTAINER=$(docker ps --all --format "{{.Names}}" --filter name=web)
docker-compose pull web
docker-compose up -d --no-deps --scale web=2 --no-recreate web
NEW_CONTAINER=$(docker ps --all --format "{{.Names}}" --filter name=web | grep -v "$OLD_CONTAINER")
echo -n "Starting $NEW_CONTAINER ... "
while [ "$(docker ps --format "{{.Names}}" --filter name=web --filter health=healthy | grep "$NEW_CONTAINER")" = "" ]; do
sleep 3s
done
echo '\e[38;5;002mdone\e[m'
echo -n "Stopping and removing $OLD_CONTAINER ... "
docker kill -s SIGTERM $OLD_CONTAINER 2>&1 > /dev/null
if [ $? -ne 0 ]; then
exit 1
fi
while [ "$(docker ps --format "{{.Names}}" --filter name=web --filter status=running | grep "$OLD_CONTAINER")" = "$OLD_CONTAINER" ]; do
sleep 3s
done
docker rm $OLD_CONTAINER 2>&1 > /dev/null
if [ $? -ne 0 ]; then
exit 1
fi
echo '\e[38;5;002mdone\e[m'
docker-compose up -d --no-deps --scale web=1 --no-recreate web
docker image prune
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment