diff --git a/Dockerfile.deb b/Dockerfile.deb
new file mode 100644
index 0000000000000000000000000000000000000000..353352bae7662764a575a155d2dec3d447a12f7d
--- /dev/null
+++ b/Dockerfile.deb
@@ -0,0 +1,17 @@
+# build based on debian buster to build debian package
+FROM rust:slim-buster
+WORKDIR /app
+RUN --mount=type=cache,target=/root/.cargo \
+    cargo install cargo-deb
+COPY Cargo.toml Cargo.lock ./
+RUN --mount=type=cache,target=/app/target \
+    --mount=type=cache,target=/root/.cargo/registry \
+    mkdir src \
+    && echo "fn main() {}" > src/main.rs \
+    && cargo build --release \
+    && rm -r src
+COPY ./res ./res
+COPY ./src ./src
+RUN cargo build --release
+RUN cargo deb --no-build
+RUN rm -r /app/target/release
\ No newline at end of file
diff --git a/docker/build.sh b/docker/build.sh
index a327c021f0476ae165cd5cd5ec73263e42ff33fc..a46e5c3acd48d1f977025b9f615e6b9a1bb4ba4d 100755
--- a/docker/build.sh
+++ b/docker/build.sh
@@ -1,15 +1,5 @@
-#!/bin/bash
+#!/bin/sh
 
-# Also generated by chatGPT
-
-# Name of your Docker image
-IMAGE_NAME="gcli"
-
-# Version of your Docker image
-IMAGE_VERSION="latest"
-
-# Build and tag the Docker image using Docker Buildx
-docker buildx build -t "$IMAGE_NAME:$IMAGE_VERSION" .
-
-# Optionally, you can push the image to a Docker registry
-# docker push "$IMAGE_NAME:$IMAGE_VERSION"
+IMAGE_NAME=gcli
+IMAGE_VERSION=latest
+docker buildx build -t $IMAGE_NAME:$IMAGE_VERSION .
diff --git a/docker/debian.sh b/docker/debian.sh
new file mode 100755
index 0000000000000000000000000000000000000000..928f9c7d0d149eaf6cdb2a5bccbc1b25696e570a
--- /dev/null
+++ b/docker/debian.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# build debian package
+VERSION=0.2.10-1
+IMAGE_NAME=gcli_deb
+IMAGE_VERSION=latest
+docker buildx build -f Dockerfile.deb -t $IMAGE_NAME:$IMAGE_VERSION .
+
+mkdir -p ./target/debian
+id=$(docker create $IMAGE_NAME:$IMAGE_VERSION)
+docker cp $id:/app/target/debian/gcli_${VERSION}_amd64.deb ./target/debian
+docker rm -v $id
\ No newline at end of file