Skip to content

Instantly share code, notes, and snippets.

@jcortejoso
Created July 17, 2015 16:36
Show Gist options
  • Save jcortejoso/f8abf23ddd47d3b43474 to your computer and use it in GitHub Desktop.
Save jcortejoso/f8abf23ddd47d3b43474 to your computer and use it in GitHub Desktop.
docker-functions.sh
#!/bin/bash
# bash wrappers for docker run commands
#
# Helper Functions
#
docker_dcleanup(){
docker rm $(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
}
docker_del_stopped(){
local name=$1
local state=$(docker inspect --format "{{.State.Running}}" $name 2>/dev/null)
if [[ "$state" == "false" ]]; then
docker rm $name
fi
}
docker_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
}
#
# Container Aliases
#
docker_apt_file(){
docker run --rm -it \
--name apt-file \
jess/apt-file
}
alias apt-file="apt_file"
docker_aws(){
docker run -t --rm \
-v $HOME/.aws:/root/.aws \
--log-driver none \
--name aws \
jess/awscli "$@"
}
docker_cadvisor(){
docker run -d \
-v /:/rootfs:ro \
-v /var/run:/var/run:rw \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-p 1212:8080 \
--name cadvisor \
google/cadvisor
browser-exec "http://127.0.0.1:1212"
}
docker_chrome(){
del_stopped chrome
docker run -d \
--memory 5gb \
--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 \
--device /dev/snd \
--device /dev/dri \
--device /dev/video0 \
--name chrome \
jess/chrome --user-data-dir=/data --force-device-scale-factor=1 "$@"
# exit current shell
exit 0
}
docker_cloudapp(){
docker run -t --rm \
-v $HOME/pics/$@:/root/$@ \
--log-driver none \
jess/cloudapp "$@"
}
docker_documentserver(){
del_stopped documentserver
docker run --rm -it \
-p 1234:80 \
-v $HOME/slides:/slides \
--name documentserver \
onlyoffice/documentserver
browser-exec "http://127.0.0.1:1234/"
}
docker_firefox(){
del_stopped firefox
docker run -d \
--memory 2gb \
--net host \
--cpuset-cpus 0 \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $HOME/.firefox/cache:/root/.cache/mozilla \
-v $HOME/.firefox/mozilla:/root/.mozilla \
-v $HOME/Downloads:/root/Downloads \
-v $HOME/Pictures:/root/Pictures \
-v $HOME/Torrents:/root/Torrents \
-e DISPLAY=unix$DISPLAY \
-e GDK_SCALE \
-e GDK_DPI_SCALE \
--device /dev/snd \
--device /dev/dri \
--name firefox \
jess/firefox "$@"
# exit current shell
exit 0
}
docker_gcalcli(){
docker run --rm -it \
-v /etc/localtime:/etc/localtime:ro \
-v $HOME/.gcalcli/home:/home/gcalcli/home \
-v $HOME/.gcalcli/work/oauth:/home/gcalcli/.gcalcli_oauth \
-v $HOME/.gcalcli/work/gcalclirc:/home/gcalcli/.gcalclirc \
--name gcalcli \
jess/gcalcli "$@"
}
docker_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/.gtkrc:/root/.gtkrc \
-e GDK_SCALE \
-e GDK_DPI_SCALE \
--name gimp \
jess/gimp
}
docker_hollywood(){
docker run --rm -it \
--name hollywood \
jess/hollywood
}
docker_htop(){
docker run --rm -it \
--pid host \
--name htop \
jess/htop
}
docker_http(){
docker run -t --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
--log-driver none \
jess/httpie "$@"
}
docker_imagemin(){
local image=$1
docker run --rm -it \
-v /etc/localtime:/etc/localtime:ro \
-v $HOME/Pictures:/root/Pictures \
jess/imagemin "/root/Pictures/${image} > /root/Pictures/${image}.edited"
}
docker_irssi(){
del_stopped irssi
relies_on notify_osd
docker run --rm -it \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/machine-id:/etc/machine-id:ro \
-v /var/run/dbus:/var/run/dbus \
-v /var/run/user/$(id -u):/var/run/user/$(id -u) \
-e TERM \
-e XAUTHORITY \
-e DBUS_SESSION_BUS_ADDRESS \
-e HOME \
-v /etc/passwd:/etc/passwd:ro \
-v /etc/group:/etc/group:ro \
-u $(whoami) -w "$HOME" \
-v $HOME/.Xauthority:$HOME/.Xauthority \
-v $HOME/.irssi:$HOME/.irssi \
--read-only \
--name irssi \
jess/irssi
}
docker_kernel_builder(){
docker run --rm -it \
-v /usr/src:/usr/src \
--name kernel-builder \
jess/kernel-builder
}
docker_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/slides:/root/slides \
-e GDK_SCALE \
-e GDK_DPI_SCALE \
--name libreoffice \
jess/libreoffice
}
docker_mpd(){
del_stopped mpd
# adding cap sys_admin so I can use nfs mount
# the container runs as a unpriviledged user mpd
docker run -d \
--device /dev/snd \
--cap-add SYS_ADMIN \
-e MPD_HOST=/var/lib/mpd/socket \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/exports:/etc/exports:ro \
-v $HOME/.mpd:/var/lib/mpd \
-v $HOME/.mpd.conf:/etc/mpd.conf \
--name mpd \
jess/mpd
}
docker_mutt(){
# subshell so we dont overwrite variables
(
local account=$1
if [[ "$account" == "docker" ]]; then
GMAIL=$GMAIL2
GMAIL_NAME=$GMAIL2_NAME
GMAIL_PASS=$GMAIL2_PASS
GMAIL_FROM=$GMAIL2_FROM
fi
docker run -it --rm \
-e GMAIL \
-e GMAIL_NAME \
-e GMAIL_PASS \
-e GMAIL_FROM \
-v $HOME/.gnupg:/home/user/.gnupg \
-v /etc/localtime:/etc/localtime:ro \
--name mutt${account} \
jess/mutt
)
}
docker_ncmpc(){
del_stopped ncmpc
docker run --rm -it \
-v $HOME/.mpd/socket:/var/run/mpd/socket \
-e MPD_HOST=/var/run/mpd/socket \
--name ncmpc \
jess/ncmpc "$@"
}
docker_nes(){
del_stopped nes
local game=$1
docker run -d \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix$DISPLAY \
--device /dev/dri \
--device /dev/snd \
--name nes \
jess/nes /games/${game}.rom
}
docker_notify_osd(){
del_stopped notify-osd
docker run -d \
-v /etc/machine-id:/etc/machine-id:ro \
-v /var/run/dbus:/var/run/dbus \
-v /var/run/user/$(id -u):/var/run/user/$(id -u) \
-v /etc/localtime:/etc/localtime:ro \
-e XAUTHORITY \
-e DBUS_SESSION_BUS_ADDRESS \
-v /etc/passwd:/etc/passwd:ro \
-v /etc/group:/etc/group:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix$DISPLAY \
-u $(whoami) -w "$HOME" \
-v $HOME/.Xauthority:$HOME/.Xauthority \
-v $HOME/.cache/dconf:$HOME/.cache/dconf \
--name notify_osd \
jess/notify-osd
}
docker_pms(){
del_stopped pms
docker run --rm -it \
-v $HOME/.mpd/socket:/var/run/mpd/socket \
-e MPD_HOST=/var/run/mpd/socket \
--name pms \
jess/pms "$@"
}
docker_pulseaudio(){
del_stopped pulseaudio
docker run -d \
-v /etc/localtime:/etc/localtime \
--device /dev/snd \
-p 4713:4713 \
--restart always \
--name pulseaudio \
jess/pulseaudio
}
docker_rainbowstream(){
docker run -it --rm \
-v /etc/localtime:/etc/localtime \
-v $HOME/.rainbow_oauth:/root/.rainbow_oauth \
-v $HOME/.rainbow_config.json:/root/.rainbow_config.json \
--name rainbowstream \
jess/rainbowstream
}
docker_remmina(){
del_stopped remmina
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 \
-v $HOME/.remmina:/root/.remmina \
--name remmina \
jess/remmina
}
docker_reviewed(){
docker run -t --rm \
-e IDT_USERNAME \
-e IDT_PASSWORD \
-e IDT_ADDRESS \
jess/idonethis "reviewed #${1}"
}
docker_skype(){
del_stopped skype
relies_on pulseaudio
docker run -d \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix$DISPLAY \
--link pulseaudio:pulseaudio \
-e PULSE_SERVER=pulseaudio \
--device /dev/video0 \
--name skype \
jess/skype
}
docker_slack(){
del_stopped slack
docker run -d \
-v /etc/machine-id:/etc/machine-id:ro \
-v /var/run/dbus:/var/run/dbus \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix$DISPLAY \
--device /dev/snd \
--name slack \
jess/slack
}
docker_spotify(){
del_stopped spotify
docker run -d \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix$DISPLAY \
-e QT_DEVICE_PIXEL_RATIO \
--device /dev/snd \
-v $HOME/.spotify/config:/home/spotify/.config/spotify \
-v $HOME/.spotify/cache:/home/spotify/.cache/spotify \
--name spotify \
jess/spotify
}
docker_steam(){
del_stopped steam
relies_on pulseaudio
docker run -d \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/machine-id:/etc/machine-id:ro \
-v /var/run/dbus:/var/run/dbus \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $HOME/.steam:/home/steam \
-e DISPLAY=unix$DISPLAY \
--link pulseaudio:pulseaudio \
-e PULSE_SERVER=pulseaudio \
--device /dev/dri \
--name steam \
jess/steam
}
docker_t(){
docker run -t --rm \
-v $HOME/.trc:/root/.trc \
--log-driver none \
jess/t "$@"
}
docker_termboy(){
del_stopped termboy
local game=$1
docker run --rm -it \
--device /dev/snd \
--name termboy \
jess/nes /games/${game}.rom
}
docker_tor(){
del_stopped tor
docker run -d \
--net host \
--name tor \
jess/tor
# set up the redirect iptables rules
sudo tor-ips
# validate we are running through tor
browser-exec "https://check.torproject.org/"
}
docker_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 \
jess/tor-browser
# exit current shell
exit 0
}
docker_transmission(){
docker run -d \
-v /etc/localtime:/etc/localtime:ro \
-v $HOME/Torrents:/transmission/download \
-v $HOME/.transmission:/transmission/config \
-p 9091:9091 \
-p 51413:51413 \
-p 51413:51413/udp \
--name transmission \
jess/transmission
browser-exec "http://127.0.0.1:9091/transmission"
}
docker_virtualbox(){
del_stopped virtualbox
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 \
--name virtualbox \
--net host \
-v "$HOME/.vbox/vms:/root/VirtualBox VMs" \
-v $HOME/.vbox/config:/root/.config/VirtualBox \
--privileged \
jess/virtualbox
}
docker_visualstudio(){
del_stopped visualstudio
docker run -d \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix$DISPLAY \
--name visualstudio \
jess/visualstudio
}
docker_vlc(){
del_stopped vlc
relies_on pulseaudio
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 \
-e QT_DEVICE_PIXEL_RATIO \
--link pulseaudio:pulseaudio \
-e PULSE_SERVER=pulseaudio \
-v $HOME/Torrents:/home/vlc/Torrents \
--device /dev/dri \
--name vlc \
jess/vlc
}
###
### Awesome sauce by @jpetazzo
###
command_not_found_handle () {
# Check if there is a container image with that name
if ! docker inspect --format '{{ .Author }}' "$1" >&/dev/null ; then
echo "$0: $1: command not found"
return
fi
# Check that it's really the name of the image, not a prefix
if docker inspect --format '{{ .Id }}' "$1" | grep -q "^$1" ; then
echo "$0: $1: command not found"
return
fi
docker run -ti -u $(whoami) -w "$HOME" \
$(env | cut -d= -f1 | awk '{print "-e", $1}') \
--device /dev/snd \
-v /etc/passwd:/etc/passwd:ro \
-v /etc/group:/etc/group:ro \
-v /etc/localtime:/etc/localtime:ro \
-v /home:/home \
-v /tmp/.X11-unix:/tmp/.X11-unix \
"jess/$@"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment