diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index d5990e1..756d95a 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -21,6 +21,7 @@ jobs:
           path: ./admin-frontend/build/
   publish-pypi:
     runs-on: ubuntu-latest
+    needs: build-frontend
 
     steps:
       - uses: actions/checkout@v3
@@ -36,3 +37,50 @@ jobs:
 
       - name: Publish PyPI
         run: poetry publish --build -u ${{ secrets.PYPI_USERNAME }} -p ${{ secrets.PYPI_PASSWORD }} || echo "Already pushed to pypi"
+  publish-docker:
+    runs-on: ubuntu-latest
+    needs: build-frontend
+
+    steps:
+      - uses: actions/checkout@v3
+
+      - name: Download frontend files
+        uses: actions/download-artifact@v2
+        with:
+          name: frontend
+          path: ./src/plugins/nonebot_bison/admin_page/dist
+
+      - name: Set up QEMU
+        uses: docker/setup-qemu-action@v1
+
+      - name: Set up Docker Buildx
+        uses: docker/setup-buildx-action@v1
+
+      - name: Login to DockerHub
+        if: github.event_name != 'pull_request'
+        uses: docker/login-action@v1
+        with:
+          username: ${{ secrets.DOCKER_USERNAME }}
+          password: ${{ secrets.DOCKER_PASSWORD }}
+
+      - name: Build and push
+        uses: docker/build-push-action@v2
+        with:
+          context: .
+          file: ./docker/Dockerfile_with_frontend
+          push: true
+          tags: |
+            felinae98/nonebot-bison:latest
+            felinae98/nonebot-bison:${{ github.event.release.tag_name }}
+          cache-from: type=gha
+          cache-to: type=gha,mode=max
+
+      - name: Build Sentry and push
+        uses: docker/build-push-action@v2
+        with:
+          context: .
+          file: ./docker/Dockerfile_with_frontend_sentry
+          push: true
+          tags: felinae98/nonebot-bison:${{ github.event.release.tag_name }}-sentry
+          cache-from: type=gha
+          cache-to: type=gha,mode=max
\ No newline at end of file