#!/bin/bash # Bash wrappers for docker run commands # inspired by https://github.com/jfrazelle/dotfiles/ <3 export DOCKER_REPO_PREFIX=fschl # # Helper Functions # dcleanup() { # TODO: add list of non-disposable containers (eclipse, intelliJ, ...?) docker rm -v $(docker ps --filter status=exited -q 2>/dev/null) 2>/dev/null docker rmi $(docker images --filter dangling=true -q 2>/dev/null) 2>/dev/null } del_stopped() { local name=$1 local state=$(docker inspect --format "{{.State.Running}}" $name 2>/dev/null) if [[ "$state" == "false" ]]; then docker rm $name fi } relies_on() { local containers=$@ for container in $containers; do local state=$(docker inspect --format "{{.State.Running}}" $container 2>/dev/null) if [[ "$state" == "false" ]] || [[ "$state" == "" ]]; then echo "$container is not running, starting it for you." $container fi done } # Applications... android-studio() { ANDROID_DIR="/home/fschl/projects/android" # for dir in .studio-home .gradle .idea .android/avd; do # mkdir -p $ANDROID_DIR/.docker-dev/$dir # done # TODO: mount /home/developer/android-sdk-linux # docker start android-studio ## You don't want to remove the container between uses, because many things installed ## via the _Android Studio GUI_ are only stored in the container. # del_stopped android-studio docker run -it \ --net=host \ --name android-studio \ --privileged \ -e DISPLAY \ -e SHELL=/bin/bash \ -e GRADLE_USER_HOME='/workspace/.docker-dev/.gradle/home' \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v /dev/bus/usb:/dev/bus/usb \ -v $ANDROID_DIR/projects:/home/developer/AndroidStudioProjects \ -v $ANDROID_DIR:/workspace \ -v $ANDROID_DIR/.docker-dev/.studio-home:/home/developer/.AndroidStudio1.2 \ -v $ANDROID_DIR/.docker-dev/.android:/home/developer/.android \ ${DOCKER_REPO_PREFIX}/android-studio3:latest \ /bin/studio #exit 0; } ant() { local args=$@ local cur_dir=$(pwd) local targetmount=$(basename $cur_dir) docker run -it --rm \ -v $(pwd):/src/$targetmount \ -w /src/$targetmount \ ${DOCKER_REPO_PREFIX}/antpp \ bash -c "$args" } arduino() { docker run \ -it \ --rm \ --network=host \ --privileged \ -e DISPLAY=$DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v /dev/ttyUSB0:/dev/ttyUSB0 \ -v $HOME/topics:/topics \ -v $HOME/projects:/projects \ tombenke/darduino:latest \ arduino } bro() { docker run -it --rm \ ${DOCKER_REPO_PREFIX}/bropages \ bro "$@" } chrome() { # add flags for proxy if passed local proxy= local map= local args=$@ del_stopped chrome # one day remove /etc/hosts bind mount when effing # overlay support inotify, such bullshit # --memory 2gb \ docker run -d \ --net host \ -v /etc/localtime:/etc/localtime:ro \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=unix$DISPLAY \ -v $HOME/Downloads:/root/Downloads \ -v $HOME/Pictures:/root/Pictures \ -v $HOME/Torrents:/root/Torrents \ -v $HOME/.chrome:/data \ -v /dev/shm:/dev/shm \ -v /etc/hosts:/etc/hosts \ --device /dev/snd \ --device /dev/dri \ --device /dev/video0 \ --group-add audio \ --group-add video \ --name="chrome" \ ${DOCKER_REPO_PREFIX}/chrome:latest --user-data-dir=/data #--force-device-scale-factor=1 \ #--proxy-server="$proxy" --host-resolver-rules="$map" "$args" } clion() { #del_stopped intelli_ult docker run -it \ --net host \ --name="clion" \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=unix$DISPLAY \ -v $HOME/.CLion2016.3/:/home/developer/.CLion2016.3/ \ -v $HOME/.clion_config/:/home/developer/clion-2016.3.3/ \ -v $HOME/projects/cpp/clProjects:/home/developer/CLionProjects/ \ -p 8080:8080 \ ${DOCKER_REPO_PREFIX}/clion:latest } cordova() { docker run -it \ --name="cordova-cli" \ --net host \ -v $HOME/projects/cordova/:/src/ \ -v /dev/bus/usb:/dev/bus/usb \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=unix$DISPLAY \ -p 127.0.0.1:8000:8000 \ fschl/cordova bash } eclipse() { del_stopped eclipse docker run -d \ --net host \ --name="eclipse" \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=unix$DISPLAY \ -v $HOME/projects/java/workspace:/home/eclipse/workspace \ -v $HOME/.eclipse/plugins:/opt/eclipse/plugins \ -v $HOME/.eclipse/configuration:/opt/eclipse/configuration \ -v $HOME/.eclipse/sonar:/home/eclipse/.sonar \ ${DOCKER_REPO_PREFIX}/eclipse:latest # exit 0; } eneon() { del_stopped eclipse_neon # -v $HOME/.eclipse_neon/plugins:/opt/eclipse/plugins \ # -v $HOME/.eclipse_neon/configuration:/opt/eclipse/configuration \ # -v $HOME/.eclipse_neon/sonar:/home/eclipse/.sonar \ docker run -it \ --net host \ --name="eclipse_neon" \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=unix$DISPLAY \ -v $HOME/projects/java/workspace:/home/eclipse/workspace \ -v $HOME/dockerfiles/eclipse/eclipse.ini:/opt/eclipse/eclipse.ini:ro \ -v $HOME/.eclipse_neon/eclipse:/home/elipse/.eclipse/ \ -v $HOME/.eclipse_neon/plugins:/opt/eclipse/plugins/ \ -v $HOME/.eclipse_neon/configuration:/opt/eclipse/configuration \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $(which docker):/bin/docker \ --device /dev/video0 \ --group-add audio \ --group-add video \ ${DOCKER_REPO_PREFIX}/eclipse:neon # exit 0; } oxygen() { # del_stopped papyrus MYUSERID=$(id --user) echo "starting papyrus with uid" echo $MYUSERID # -v $BASE/.eclipse:/home/eclipse/.eclipse/ \ # -v $BASE/.gradle:/home/eclipse/.gradle/ \ # -v $BASE/.egradle:/home/eclipse/.egradle/ \ # -v $BASE/plugins:/opt/eclipse/plugins/ \ # -v $BASE/configuration:/opt/eclipse/configuration \ local BASE="/media/driveBay/Backups/eclipse-configs/oxygen_configs" docker run -it \ --net host \ --name="oxygen" \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=unix$DISPLAY \ -v $HOME/projects/java/workspace:/home/eclipse/workspace \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $(which docker):/bin/docker \ --user $MYUSERID \ --device /dev/video0 \ --group-add audio \ --group-add video \ ${DOCKER_REPO_PREFIX}/eclipse:oxygen \ sh -c "/opt/eclipse/eclipse" # exit 0; } gimp() { del_stopped gimp docker run -d \ -v /etc/localtime:/etc/localtime:ro \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=unix$DISPLAY \ -v $HOME/Pictures:/root/Pictures \ -v $HOME/Documents:/root/Documents \ --name gimp \ ${DOCKER_REPO_PREFIX}/gimp exit 0; } icedove() { del_stopped icedove MYUSERID=$(id --user) echo "starting with" echo $MYUSERID docker run -d \ --name="icedove" \ -v /etc/localtime:/etc/localtime:ro \ -v $HOME/Downloads/:/root/Downloads \ -v $HOME/Documents/:/root/Documents \ -v $HOME/.thunderbird/:/root/.thunderbird \ -v $HOME/.gnupg/:/root/.gnupg \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=unix$DISPLAY \ ${DOCKER_REPO_PREFIX}/thunderbird:latest # -v $HOME/.thunderbird/:/root/.icedove \ # ${DOCKER_REPO_PREFIX}/icedove:latest exit 0; } thunderbird() { del_stopped thunderbird MYUSERID=$(id --user) echo "starting thunderbird with uid" echo $MYUSERID # docker run -d docker run -ti \ --name="thunderbird" \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=unix$DISPLAY \ -v /etc/localtime:/etc/localtime:ro \ --user $MYUSERID \ -v $HOME/Downloads/:/home/appuser/Downloads \ -v $HOME/Documents/:/home/appuser/Documents \ -v $HOME/.thunderbird/:/home/appuser/.thunderbird \ -v $HOME/.gnupg/:/home/appuser/.gnupg \ ${DOCKER_REPO_PREFIX}/thunderbird:latest \ bash # exit 0; } inkscape() { del_stopped inkscape # -v $HOME/.Xauthority:/home/inkscaper/.Xauthority \ docker run --rm \ --name="inkscape" \ -v $HOME/Pictures:/home/inkscaper/Pictures \ -v $HOME/Documents:/home/inkscaper/Documents \ -u inkscaper \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=unix$DISPLAY \ --net=host \ ${DOCKER_REPO_PREFIX}/inkscape:latest exit 0; } intelli_ult() { #del_stopped intelli_ult docker run -it \ --net host \ --name="intelli_ult" \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=unix$DISPLAY \ -v $HOME/projects/java/IdeaProjects:/home/developer/IdeaProjects/ \ -v m2-local:/root/.m2 \ -v $HOME/.IntelliJIdea_ult/:/home/developer/.IntelliJIdea2016.2/ \ -p 8080:8080 \ ${DOCKER_REPO_PREFIX}/intellij-ult:latest } java() { local args=$@ local cur_dir=$(pwd) local PROJECT=$(basename $cur_dir) del_stopped java_$PROJECT docker run -it \ --name="java_$PROJECT" \ -v $(pwd):/src/$PROJECT \ -w /src/$PROJECT \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=unix$DISPLAY \ --net=host \ openjdk:8 \ bash -c "$args" } latex() { del_stopped latex docker run -it --rm \ --net host \ -v $(pwd):/usr/src/latex \ --workdir="/usr/src/latex" \ ${DOCKER_REPO_PREFIX}/latex "$@" } pdflatex() { local file=$@ local cur_dir=$(pwd) local FILENAME=${file%%.*} latex bash -c "latex $file; latex $file; pdflatex $file" sudo rm $FILENAME.aux $FILENAME.dvi $FILENAME.out sudo chown ${DOCKER_REPO_PREFIX}:${DOCKER_REPO_PREFIX} $FILENAME.pdf } libreoffice() { del_stopped libreoffice docker run -d \ -v /etc/localtime:/etc/localtime:ro \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=unix$DISPLAY \ -v $HOME/Documents:/root/Documents \ -v $HOME/Pictures:/root/Pictures \ -v $HOME/Downloads:/root/Downloads \ -e GDK_SCALE \ -e GDK_DPI_SCALE \ --name libreoffice \ ${DOCKER_REPO_PREFIX}/libreoffice exit 0; } memo() { del_stopped memo_standalone docker run -it \ --name memo_standalone \ --net host \ -v $HOME/Documents:/root/Documents \ -v $HOME/Downloads:/root/Downloads \ -v $HOME/.memo:/root/.memo \ -e DISPLAY=$DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix \ ${DOCKER_REPO_PREFIX}/memo:latest #exit 0; } netbeans() { docker run -it \ --name netbeans \ -e DISPLAY=$DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v $HOME/.netbeans-docker:/home/developer/.netbeans \ -v $HOME/projects/java/workspace:/home/developer/NetBeansProjects \ -v $HOME/projects/java/workspace:/workspace \ ${DOCKER_REPO_PREFIX}/netbeans:latest } # start from a directory which contains a openvpn config file named 'config.ovpn' # cert and key files should be in the same directory or relatively referencable # from the config file openvpn() { del_stopped openvpn docker run -it --rm \ --name="openvpn" \ --net host \ --device /dev/net/tun:/dev/net/tun \ --cap-add NET_ADMIN \ -v "$PWD":/etc/openvpn \ ${DOCKER_REPO_PREFIX}/openvpn:latest config.ovpn } pulseaudio() { del_stopped pulseaudio docker run -d \ -v /etc/localtime:/etc/localtime:ro \ --device /dev/snd \ -p 4713:4713 \ --restart always \ --name pulseaudio \ ${DOCKER_REPO_PREFIX}/pulseaudio } # pulseaudio() { # del_stopped pulseaudio # docker run -d \ # -v /etc/localtime:/etc/localtime:ro \ # --device /dev/snd \ # -p 4713:4713 \ # --restart always \ # -v /var/run/dbus:/var/run/dbus \ # -v /etc/machine-id:/etc/machine-id \ # --name pulseaudio \ # ${DOCKER_REPO_PREFIX}/pulseaudio # } p3() { local args=$@ local cur_dir=$(pwd) local targetmount=$(basename $cur_dir) docker run -it --rm \ -v $(pwd):/src/$targetmount \ -w /src/$targetmount \ python:3 \ bash -c "$args" } rstudio(){ del_stopped rstudio docker run -d \ -v /etc/localtime:/etc/localtime:ro \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v $HOME/fastly-logs:/root/fastly-logs \ -v /dev/shm:/dev/shm \ -p 8787 \ -e DISPLAY=unix$DISPLAY \ --device /dev/dri \ --name rstudio \ rocker/rstudio exit 0; } scenebuilder() { del_stopped scenebuilder docker run -it \ --net host \ --name="scenebuilder" \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=unix$DISPLAY \ -v $HOME/projects/java/workspace:/home/eclipse/workspace \ ${DOCKER_REPO_PREFIX}/scenebuilder:latest "$@" exit 0; } skype() { del_stopped skype docker run -d \ -v $HOME/Downloads:/root/skype/Downloads \ -v /run/user/1000/pulse:/run/user/1000/pulse \ -v /var/lib/dbus:/var/lib/dbus \ -v ~/.pulse:/root/.pulse \ -v /etc/localtime:/etc/localtime:ro \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=unix$DISPLAY \ --device /dev/video0 \ --device /dev/snd \ --name skype \ --net host \ ${DOCKER_REPO_PREFIX}/skype exit 0; } torbrowser() { del_stopped torbrowser docker run -d \ -v /etc/localtime:/etc/localtime:ro \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=unix$DISPLAY \ -e GDK_SCALE \ -e GDK_DPI_SCALE \ --device /dev/snd \ --name torbrowser \ ${DOCKER_REPO_PREFIX}/tor-browser exit 0; } transmission() { del_stopped transmission docker run -d \ -v /etc/localtime:/etc/localtime:ro \ -v $HOME/Downloads:/transmission/download \ -v $HOME/.transmission:/transmission/config \ -p 9091:9091 \ -p 51413:51413 \ -p 51413:51413/udp \ --name transmission \ ${DOCKER_REPO_PREFIX}/transmission } wireshark() { del_stopped wireshark docker run -it \ -v /etc/localtime:/etc/localtime:ro \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v $(pwd):/home/wireshark \ -e DISPLAY=unix$DISPLAY \ --name wireshark \ jess/wireshark }