diff --git a/Dockerfile b/Dockerfile
index 542f39c..735cac6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -6,7 +6,8 @@ ENV PATH="${PATH}:/app/vendor/bin"
 
 WORKDIR /app
 
-RUN adduser --disabled-password app \
+RUN apk add --no-cache bash \
+  && adduser --disabled-password app \
   && chown app:app -R /app
 
 USER app
diff --git a/run b/run
new file mode 100755
index 0000000..21f86d5
--- /dev/null
+++ b/run
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# Based on https://github.com/adriancooney/Taskfile and
+# https://nickjanetakis.com/blog/replacing-make-with-a-shell-script-for-running-your-projects-tasks.
+
+DOCKER_TAG=meetup-raffle-winner-picker
+
+function build {
+  # Build the Docker image.
+  docker image build . --tag ${DOCKER_TAG}
+}
+
+function help {
+  printf "%s <task> [args]\n\nTasks:\n" "${0}"
+
+  compgen -A function | grep -v "^_" | cat -n
+
+  printf "\nExtended help:\n  Each task has comments for general usage\n"
+}
+
+function test {
+  # Run PHPUnit tests.
+  docker container run --rm -it \
+    -v $(pwd):/app \
+    --entrypoint phpunit \
+    ${DOCKER_TAG} "${@}"
+}
+
+eval "${@:-help}"