# Supfile for "Example" Docker service --- version: 0.4 env: # Environment variables for all commands NAME: example REPO: github.com/pressly/sup BRANCH: master IMAGE: pressly/example HOST_PORT: 8000 CONTAINER_PORT: 8000 networks: # Groups of hosts local: hosts: - localhost dev: env: # Extra environment variable for dev hosts only DOCKER_HOST: tcp://127.0.0.1:2375 hosts: - docker@192.168.59.103 stg: hosts: - ubuntu@stg.example.com prod: inventory: for i in 1 2 3 4; do echo "ubuntu@prod$i.example.com"; done k8s: inventory: for i in $(kubectl get nodes -o jsonpath={.items[*].status.addresses[?\(@.type==\"InternalIP\"\)].address}); do echo "ubuntu@$i"; done commands: # Named set of commands to be run remotely ping: desc: Print uname and current date/time. run: uname -a; date pre-build: desc: Initialize directory run: mkdir -p /tmp/$IMAGE mytest: run: echo $SUP_TIME build: desc: Build Docker image from current directory, push to Docker Hub # local: sup $SUP_ENV -f ./builder/Supfile $SUP_NETWORK build upload: - src: ./ dst: /tmp/$IMAGE script: ./scripts/docker-build.sh once: true pull: desc: Pull latest Docker image run: sudo docker pull $IMAGE config: desc: Upload/test config file. upload: - src: ./example.$SUP_NETWORK.cfg dst: /tmp/ run: test -f /tmp/example.$SUP_NETWORK.cfg stop: desc: Stop Docker container run: sudo docker stop $NAME || exit 0 rm: desc: Remove Docker container run: sudo docker rm $NAME || exit 0 start: desc: Start a stopped Docker container run: sudo docker start $NAME || exit 0 run: desc: Run Docker container run: > sudo docker run -d \ -p $HOST_PORT:$CONTAINER_PORT \ -v /tmp/example.$SUP_NETWORK.cfg:/etc/example.cfg \ --restart=always \ --name $NAME $IMAGE restart: desc: Restart Docker container run: sudo docker restart $NAME || exit 0 stop-rm-run: desc: Rolling update (stop & remove old Docker container, run new one) run: > sudo docker stop $NAME || :; \ sudo docker rm $NAME || :; \ sudo docker run -d \ -p $HOST_PORT:$CONTAINER_PORT \ -v /tmp/example.$SUP_NETWORK.cfg:/etc/example.cfg \ --restart=always \ --name $NAME $IMAGE serial: 1 ps: desc: List running Docker containers run: sudo docker ps | grep $NAME logs: desc: Docker logs run: sudo docker logs $NAME tail-logs: desc: Tail Docker logs run: sudo docker logs --tail=20 -f $NAME health: desc: Application health check run: curl localhost:$HOST_PORT slack-notify: desc: Notify Slack about new deployment local: > curl -X POST --data-urlencode 'payload={"channel": "#_team_", "text": "['$SUP_NETWORK'] '$SUP_USER' deployed '$NAME'"}' \ https://hooks.slack.com/services/X/Y/Z bash: desc: Interactive shell on all hosts stdin: true run: bash exec: desc: Interactive docker exec on all hosts stdin: true run: sudo docker exec -i $NAME bash targets: # Aliases to run multiple commands at once deploy: - pre-build - build - pull - config - stop-rm-run - ps - logs - health - slack-notify