diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..9d78f2a
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,10 @@
+.git
+.config
+target/
+.gitignore
+.gitmodules
+*.md
+cspell*
+.editorconfig
+.dockerignore
+Dockerfile
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..6d3c97c
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,23 @@
+## Builder ##
+FROM rust:1.80-alpine AS builder
+
+WORKDIR /usr/src/luciders
+COPY . .
+
+# 32-bit musl-dev for indoc! macro dep.
+RUN apk add --no-cache musl-dev
+RUN cargo build --release
+
+## Runner ##
+FROM alpine:3.20 AS runner 
+
+RUN adduser -D -u 1000 lucidersuser
+USER lucidersuser
+
+WORKDIR /home/lucidersuser/app
+COPY --from=builder --chown=lucidersuser:lucidersuser /usr/src/luciders/target/release/luciders .
+COPY --from=builder --chown=lucidersuser:lucidersuser /usr/src/luciders/vendor/lucide/icons ./vendor/lucide/icons
+
+EXPOSE 7878
+
+CMD [ "./luciders" ]