Last active
July 16, 2020 19:54
-
-
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.
This file contains hidden or 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
| # 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