Skip to content

Instantly share code, notes, and snippets.

@dantonnoriega
Last active July 16, 2020 19:54
Show Gist options
  • Select an option

  • Save dantonnoriega/7d8a3f080e78c07729ee5b1b8b79bec8 to your computer and use it in GitHub Desktop.

Select an option

Save dantonnoriega/7d8a3f080e78c07729ee5b1b8b79bec8 to your computer and use it in GitHub Desktop.
A script to launch an Rstudio docker container in Safari. Also, aliases to stop docker containers. Designed to go into ~/.zshrc files.
# start `n` docker containers in safari (default 1)
# usage `docker-start [-n num_session] <some_container>`
function docker-start () {
docker-start-usage() { echo "docker-start: [-n <number of session>] [<container>]" 1>&2; }
local OPTIND n o
while getopts "n:" o; do
case "${o}" in
n)
n="${OPTARG}"
echo "Spinning up ${n} session"
;;
*)
docker-start-usage
return 1
;;
esac
done
shift $((OPTIND-1))
num_sessions=${n:-1}
RUN_CONTAINER=${1:-rocker/tidyverse}
REPO_DIR=${2:-$HOME/github} # where all your repos live
# spin up a docker container
spin-docker() {
BASE_PORT1=3838
BASE_PORT2=8787
INCREMENT=1
port1=$BASE_PORT1
isfree=$(netstat -taln | grep $port1)
while [[ -n "$isfree" ]]; do
port1=$[port1+INCREMENT]
isfree=$(netstat -taln | grep $port1)
done
port2=$BASE_PORT2
isfree=$(netstat -taln | grep $port2)
while [[ -n "$isfree" ]]; do
port2=$[port2+INCREMENT]
isfree=$(netstat -taln | grep $port2)
done
docker run -d -e PASSWORD=1234 -p $port1:3838 -p $port2:8787 -v $REPO_DIR:/home/rstudio/github $RUN_CONTAINER
CONTAINER=$(docker ps | grep $port2 | sed -E 's/[ ][ ]+/|/g' | cut -d'|' -f7)
# open container in application (-a) safari but in the background (-g)
open -g -a safari http://localhost:$port2
echo $RUN_CONTAINER $REPO_DIR
echo $port2 $CONTAINER
}
# spin up docker containers
for i in $(seq 1 $num_sessions); do spin-docker; done
}
alias docker-stop='docker ps -q --filter ancestor="docker.apple.com/dnoriegagoodwin/safe-rstudio" | xargs docker stop'
alias docker-stop-all='docker ps -q | xargs docker stop'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment