The very personal dotfiles of Levi Olson.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

390 lines
9.0 KiB

6 years ago
  1. #!/bin/bash
  2. ######################################
  3. # .dockerfunc
  4. # ------------
  5. # Bash wrappers for docker run commands
  6. #
  7. # Based on the amazing work of Jess Frazelle
  8. #
  9. # :author: Levi Olson
  10. # :date: 1 Feb 2018
  11. # :version: 0.0.1
  12. ######################################
  13. export DOCKER_REPO_PREFIX=jess
  14. dcleanup() {
  15. local containers
  16. mapfile -t containers < <(docker ps -aq 2>/dev/null)
  17. docker rm "${containers[@]}" 2>/dev/null
  18. local volumes
  19. mapfile -t volumes < <(docker ps --filter status=exited -q 2>/dev/null)
  20. docker rm -v "${volumes[@]}" 2>/dev/null
  21. local images
  22. mapfile -t images < <(docker images --filter dangling=true -q 2>/dev/null)
  23. docker rmi "${images[@]}" 2>/dev/null
  24. }
  25. del_stopped() {
  26. local name=$1
  27. local state
  28. state=$(docker inspect --format "{{.State.Running}}" "$name" 2>/dev/null)
  29. if [[ "$state" == "false" ]]; then
  30. docker rm "$name"
  31. fi
  32. }
  33. relies_on() {
  34. for container in "$@"; do
  35. local state
  36. state=$(docker inspect --format "{{.State.Running}}" "$container" 2>/dev/null)
  37. if [[ "$state" == "false" ]] || [[ "$state" == "" ]]; then
  38. echo "$container is not running, starting it for you."
  39. $container
  40. fi
  41. done
  42. }
  43. ######################
  44. # Container Aliases
  45. # ---------------------
  46. ######################
  47. aws() {
  48. docker run -it --rm \
  49. -v "${HOME}/.aws:/root/.aws" \
  50. --log-driver none \
  51. --name aws \
  52. ${DOCKER_REPO_PREFIX}/awscli "$@"
  53. }
  54. cadvisor() {
  55. docker run -d \
  56. --restart always \
  57. -v /:/rootfs:ro \
  58. -v /var/run:/var/run:rw \
  59. -v /sys:/sys:ro \
  60. -v /var/lib/docker/:/var/lib/docker:ro \
  61. -p 1234:8080 \
  62. --name cadvisor \
  63. google/cadvisor
  64. hostess add cadvisor "$(docker inspect --format '{{.NetworkSettings.Networks.bridge.IPAddress}}' cadvisor)"
  65. browser-exec "http://cadvisor:8080"
  66. }
  67. chrome() {
  68. # add flags for proxy if passed
  69. local proxy=
  70. local map
  71. local args=$*
  72. if [[ "$1" == "tor" ]]; then
  73. relies_on torproxy
  74. map="MAP * ~NOTFOUND , EXCLUDE torproxy"
  75. proxy="socks5://torproxy:9050"
  76. args="https://check.torproject.org/api/ip ${*:2}"
  77. fi
  78. del_stopped chrome
  79. # one day remove /etc/hosts bind mount when effing
  80. # overlay support inotify, such bullshit
  81. docker run -d \
  82. --memory 6gb \
  83. -v /etc/localtime:/etc/localtime:ro \
  84. -v /tmp/.X11-unix:/tmp/.X11-unix \
  85. -e "DISPLAY=unix${DISPLAY}" \
  86. -v "${HOME}/Downloads:/root/Downloads" \
  87. -v "${HOME}/Pictures:/root/Pictures" \
  88. -v "${HOME}/Torrents:/root/Torrents" \
  89. -v "${HOME}/.chrome:/data" \
  90. -v /dev/shm:/dev/shm \
  91. -v /etc/hosts:/etc/hosts \
  92. --security-opt seccomp:$HOME/chrome.json \
  93. --device /dev/snd \
  94. --device /dev/dri \
  95. --device /dev/video0 \
  96. --device /dev/usb \
  97. --device /dev/bus/usb \
  98. --group-add audio \
  99. --group-add video \
  100. --name chrome \
  101. ${DOCKER_REPO_PREFIX}/chrome --user-data-dir=/data \
  102. --proxy-server="$proxy" \
  103. --host-resolver-rules="$map" "$args"
  104. }
  105. chromium() {
  106. # add flags for proxy if passed
  107. local proxy=
  108. local map
  109. local args=$*
  110. if [[ "$1" == "tor" ]]; then
  111. relies_on torproxy
  112. map="MAP * ~NOTFOUND , EXCLUDE torproxy"
  113. proxy="socks5://torproxy:9050"
  114. args="https://check.torproject.org/api/ip ${*:2}"
  115. fi
  116. del_stopped chromium
  117. # one day remove /etc/hosts bind mount when effing
  118. # overlay support inotify, such bullshit
  119. docker run -d \
  120. --memory 6gb \
  121. -v /etc/localtime:/etc/localtime:ro \
  122. -v /tmp/.X11-unix:/tmp/.X11-unix \
  123. -e "DISPLAY=unix${DISPLAY}" \
  124. -v "${HOME}/Downloads:/root/Downloads" \
  125. -v "${HOME}/Pictures:/root/Pictures" \
  126. -v "${HOME}/Torrents:/root/Torrents" \
  127. -v "${HOME}/.chrome:/data" \
  128. -v /dev/shm:/dev/shm \
  129. -v /etc/hosts:/etc/hosts \
  130. --security-opt seccomp:$HOME/chrome.json \
  131. --device /dev/snd \
  132. --device /dev/dri \
  133. --device /dev/video0 \
  134. --device /dev/usb \
  135. --device /dev/bus/usb \
  136. --group-add audio \
  137. --group-add video \
  138. --name chromium \
  139. ${DOCKER_REPO_PREFIX}/chromium --user-data-dir=/data \
  140. --proxy-server="$proxy" \
  141. --host-resolver-rules="$map" "$args"
  142. }
  143. firefox() {
  144. del_stopped firefox
  145. relies_on pulseaudio
  146. docker run -d \
  147. --memory 6gb \
  148. --net host \
  149. --cpuset-cpus 0 \
  150. -v /etc/localtime:/etc/localtime:ro \
  151. -v /tmp/.X11-unix:/tmp/.X11-unix \
  152. -v "${HOME}/.cache/mozilla:/root/.cache/mozilla" \
  153. -v "${HOME}/.mozilla:/root/.mozilla" \
  154. -v "${HOME}/Downloads:/root/Downloads" \
  155. -v "${HOME}/Pictures:/root/Pictures" \
  156. -v "${HOME}/Torrents:/root/Torrents" \
  157. -e "DISPLAY=unix${DISPLAY}" \
  158. -e GDK_SCALE \
  159. -e GDK_DPI_SCALE \
  160. --device /dev/snd \
  161. --device /dev/dri \
  162. --name firefox \
  163. ${DOCKER_REPO_PREFIX}/firefox "$@"
  164. }
  165. gimp() {
  166. del_stopped gimp
  167. docker run -d \
  168. -v /etc/localtime:/etc/localtime:ro \
  169. -v /tmp/.X11-unix:/tmp/.X11-unix \
  170. -e "DISPLAY=unix${DISPLAY}" \
  171. -v "${HOME}/Pictures:/root/Pictures" \
  172. -v "${HOME}/.gtkrc:/root/.gtkrc" \
  173. -e GDK_SCALE \
  174. -e GDK_DPI_SCALE \
  175. --name gimp \
  176. ${DOCKER_REPO_PREFIX}/gimp
  177. }
  178. hollywood() {
  179. docker run --rm -it \
  180. --name hollywood \
  181. ${DOCKER_REPO_PREFIX}/hollywood
  182. }
  183. htop() {
  184. docker run --rm -it \
  185. --pid host \
  186. --net none \
  187. --name htop \
  188. ${DOCKER_REPO_PREFIX}/htop
  189. }
  190. mpd() {
  191. del_stopped mpd
  192. # adding cap sys_admin so I can use nfs mount
  193. # the container runs as a unpriviledged user mpd
  194. docker run -d \
  195. --device /dev/snd \
  196. --cap-add SYS_ADMIN \
  197. -e MPD_HOST=/var/lib/mpd/socket \
  198. -v /etc/localtime:/etc/localtime:ro \
  199. -v /etc/exports:/etc/exports:ro \
  200. -v "${HOME}/.mpd:/var/lib/mpd" \
  201. -v "${HOME}/.mpd.conf:/etc/mpd.conf" \
  202. --name mpd \
  203. ${DOCKER_REPO_PREFIX}/mpd
  204. }
  205. nes() {
  206. del_stopped nes
  207. local game=$1
  208. docker run -d \
  209. -v /tmp/.X11-unix:/tmp/.X11-unix \
  210. -e "DISPLAY=unix${DISPLAY}" \
  211. --device /dev/dri \
  212. --device /dev/snd \
  213. --name nes \
  214. ${DOCKER_REPO_PREFIX}/nes "/games/${game}.rom"
  215. }
  216. pulseaudio() {
  217. del_stopped pulseaudio
  218. docker run -d \
  219. -v /etc/localtime:/etc/localtime:ro \
  220. --device /dev/snd \
  221. -p 4713:4713 \
  222. --restart always \
  223. --group-add audio \
  224. --name pulseaudio \
  225. ${DOCKER_REPO_PREFIX}/pulseaudio
  226. }
  227. spotify() {
  228. del_stopped spotify
  229. docker run -d \
  230. -v /etc/localtime:/etc/localtime:ro \
  231. -v /tmp/.X11-unix:/tmp/.X11-unix \
  232. -v "${HOME}/.spotify:/home/spotify/.spotify" \
  233. -v "${HOME}/.cache/spotify:/home/spotify/.cache/spotify" \
  234. -e "DISPLAY=unix${DISPLAY}" \
  235. -e QT_DEVICE_PIXEL_RATIO \
  236. --security-opt seccomp:unconfined \
  237. --device /dev/snd \
  238. --device /dev/dri \
  239. --group-add audio \
  240. --group-add video \
  241. --name spotify \
  242. ${DOCKER_REPO_PREFIX}/spotify
  243. }
  244. steam() {
  245. del_stopped steam
  246. relies_on pulseaudio
  247. docker run -d \
  248. -v /etc/localtime:/etc/localtime:ro \
  249. -v /etc/machine-id:/etc/machine-id:ro \
  250. -v /var/run/dbus:/var/run/dbus \
  251. -v /tmp/.X11-unix:/tmp/.X11-unix \
  252. -v "${HOME}/.steam:/home/steam" \
  253. -e "DISPLAY=unix${DISPLAY}" \
  254. --link pulseaudio:pulseaudio \
  255. -e PULSE_SERVER=pulseaudio \
  256. --device /dev/dri \
  257. --name steam \
  258. ${DOCKER_REPO_PREFIX}/steam
  259. }
  260. telnet() {
  261. docker run -it --rm \
  262. --log-driver none \
  263. ${DOCKER_REPO_PREFIX}/telnet "$@"
  264. }
  265. termboy() {
  266. del_stopped termboy
  267. local game=$1
  268. docker run --rm -it \
  269. --device /dev/snd \
  270. --name termboy \
  271. ${DOCKER_REPO_PREFIX}/nes "/games/${game}.rom"
  272. }
  273. tor() {
  274. del_stopped tor
  275. docker run -d \
  276. --net host \
  277. --name tor \
  278. ${DOCKER_REPO_PREFIX}/tor
  279. # set up the redirect iptables rules
  280. sudo setup-tor-iptables
  281. # validate we are running through tor
  282. browser-exec "https://check.torproject.org/"
  283. # exit current shell
  284. # exit 0
  285. }
  286. torbrowser() {
  287. del_stopped torbrowser
  288. docker run -d \
  289. -v /etc/localtime:/etc/localtime:ro \
  290. -v /tmp/.X11-unix:/tmp/.X11-unix \
  291. -e "DISPLAY=unix${DISPLAY}" \
  292. -e GDK_SCALE \
  293. -e GDK_DPI_SCALE \
  294. --device /dev/snd \
  295. --name torbrowser \
  296. ${DOCKER_REPO_PREFIX}/tor-browser
  297. # exit current shell
  298. # exit 0
  299. }
  300. tormessenger() {
  301. del_stopped tormessenger
  302. docker run -d \
  303. -v /etc/localtime:/etc/localtime:ro \
  304. -v /tmp/.X11-unix:/tmp/.X11-unix \
  305. -e "DISPLAY=unix${DISPLAY}" \
  306. -e GDK_SCALE \
  307. -e GDK_DPI_SCALE \
  308. --device /dev/snd \
  309. --name tormessenger \
  310. ${DOCKER_REPO_PREFIX}/tor-messenger
  311. # exit current shell
  312. # exit 0
  313. }
  314. torproxy() {
  315. del_stopped torproxy
  316. docker run -d \
  317. --restart always \
  318. -v /etc/localtime:/etc/localtime:ro \
  319. -p 9050:9050 \
  320. --name torproxy \
  321. ${DOCKER_REPO_PREFIX}/tor-proxy
  322. hostess add torproxy "$(docker inspect --format '{{.NetworkSettings.Networks.bridge.IPAddress}}' torproxy)"
  323. }
  324. traceroute() {
  325. docker run --rm -it \
  326. --net host \
  327. ${DOCKER_REPO_PREFIX}/traceroute "$@"
  328. }
  329. transmission() {
  330. del_stopped transmission
  331. docker run -d \
  332. -v /etc/localtime:/etc/localtime:ro \
  333. -v "${HOME}/Torrents:/transmission/download" \
  334. -v "${HOME}/.transmission:/transmission/config" \
  335. -p 9091:9091 \
  336. -p 51413:51413 \
  337. -p 51413:51413/udp \
  338. --name transmission \
  339. ${DOCKER_REPO_PREFIX}/transmission
  340. hostess add transmission "$(docker inspect --format '{{.NetworkSettings.Networks.bridge.IPAddress}}' transmission)"
  341. browser-exec "http://transmission:9091"
  342. }
  343. wireshark() {
  344. del_stopped wireshark
  345. docker run -d \
  346. -v /etc/localtime:/etc/localtime:ro \
  347. -v /tmp/.X11-unix:/tmp/.X11-unix \
  348. -e "DISPLAY=unix${DISPLAY}" \
  349. --cap-add NET_RAW \
  350. --cap-add NET_ADMIN \
  351. --net host \
  352. --name wireshark \
  353. ${DOCKER_REPO_PREFIX}/wireshark
  354. }