diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000000000000000000000000000000000000..559300fa2345245aa8f2b3ab0618d63f15649d79
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,41 @@
+name: Create Release & Upload Assets
+
+on:
+  push:
+    tags:
+      - 'v*' # Push events matching v*, ie, v1.0, v0.85-rc3
+
+jobs:
+    goreleaser:
+    name: Build and publish a release with GoReleaser
+    runs-on: ubuntu-20.04
+    needs: create_release
+    steps:
+      -
+        name: Checkout
+        uses: actions/checkout@v2
+        with:
+          fetch-depth: 0
+      -
+        name: Set up Go
+        uses: actions/setup-go@v2
+        with:
+          go-version: 1.17
+      -
+        name: Configure Go
+        id: configure_go
+        run: |
+          PATH=$PATH:/usr/local/go/bin:/home/admin/go/bin
+     -
+        name: Login to Docker Hub
+        uses: docker/login-action@v1
+        with:
+          username: ${{ secrets.DOCKERHUB_USERNAME }}
+          password: ${{ secrets.DOCKERHUB_TOKEN }}
+     -
+        name: Run GoReleaser
+        uses: goreleaser/goreleaser-action@v2
+        with:
+          version: latest
+          args: release --rm-dist
+
diff --git a/.goreleaser.yml b/.goreleaser.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1e40bc61c1cd5f0afe177cc75c20510b1c892e00
--- /dev/null
+++ b/.goreleaser.yml
@@ -0,0 +1,39 @@
+# This is an example .goreleaser.yml file with some sensible defaults.
+# Make sure to check the documentation at https://goreleaser.com
+builds:
+  - 
+    env:
+      - CGO_ENABLED=0
+    goos:
+      - linux
+    binary: manager
+dockers:
+  -
+    goarch: amd64
+    use: buildx
+    build_flag_templates:
+    - "--platform=linux/amd64"
+    image_templates:
+      - "docker.io/smallstep/step-issuer:latest-amd64"
+      - "docker.io/smallstep/step-issuer:{{ .RawVersion }}-amd64"
+  -
+    goarch: arm64
+    use: buildx
+    build_flag_templates:
+    - "--platform=linux/arm64"
+    image_templates:
+      - "docker.io/smallstep/step-issuer:latest-arm64"
+      - "docker.io/smallstep/step-issuer:{{ .RawVersion }}-arm64"
+docker_manifests:
+  -
+    name_template: "smallstep/step-issuer:{{ .RawVersion }}"
+    image_templates:
+      - "docker.io/smallstep/step-issuer:{{ .RawVersion }}-arm64"
+      - "docker.io/smallstep/step-issuer:{{ .RawVersion }}-amd64"
+
+checksum:
+  name_template: 'checksums.txt'
+snapshot:
+  name_template: "{{ incpatch .Version }}-next"
+changelog:
+  sort: asc
diff --git a/Dockerfile b/Dockerfile
index bb9194fa94705dcb475a17d6bc394d27da87f75e..cec644d155a217ea8717b0c366c81ec093e7b100 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,6 @@
 # Use distroless as minimal base image to package the manager binary
 # Refer to https://github.com/GoogleContainerTools/distroless for more details
 FROM gcr.io/distroless/static:latest
-ARG BINPATH="docker/bin/manager"
 WORKDIR /
-COPY $BINPATH .
+COPY manager manager
 ENTRYPOINT ["/manager"]
diff --git a/Makefile b/Makefile
index 2a6d94a237f3e1c8104a8c343ef8ba617c250fc0..a42fba0de602074d504285372aa0d9e45e66b9c1 100644
--- a/Makefile
+++ b/Makefile
@@ -154,74 +154,11 @@ endif
 
 .PHONY: clean
 
-#################################################
-# Docker
-#################################################
-
-DOCKER_OUTPUT=$(OUTPUT_ROOT)docker/
-DOCKER_MAKE=V=$V GOOS_OVERRIDE='GOOS=linux GOARCH=amd64' PREFIX=$(1) make $(1)bin/$(2)
-DOCKER_BUILD=$Q docker build -t $(IMG) -f $(2) --build-arg BINPATH=$(DOCKER_OUTPUT)bin/$(1) .
-
-docker: docker-make Dockerfile
-	$(call DOCKER_BUILD,manager,Dockerfile)
-
-docker-make:
-	$Q mkdir -p $(DOCKER_OUTPUT)
-	$(call DOCKER_MAKE,$(DOCKER_OUTPUT),manager)
-
-.PHONY: docker docker-make
-
-# Make sure to run a local registry
-# docker run -d -p 5000:5000 --restart=always --name registry registry:2
-docker-dev: docker
-	$Q docker tag ${IMG} localhost:5000/${IMG}
-	$Q docker push localhost:5000/${IMG}
-
-.PHONY: docker-dev
-
-#################################################
-# Releasing Docker Images
-#################################################
-
-DOCKER_TAG=docker tag smallstep/$(1):latest smallstep/$(1):$(2)
-DOCKER_PUSH=docker push smallstep/$(1):$(2)
-
-docker-tag:
-	$(call DOCKER_TAG,step-issuer,$(VERSION))
-
-docker-push-tag: docker-tag
-	$(call DOCKER_PUSH,step-issuer,$(VERSION))
-
-docker-push-tag-latest:
-	$(call DOCKER_PUSH,step-issuer,latest)
-
-# Rely on DOCKER_USERNAME and DOCKER_PASSWORD being set inside the CI or
-# equivalent environment
-docker-login:
-	$Q docker login -u="$(DOCKER_USERNAME)" -p="$(DOCKER_PASSWORD)"
-
-.PHONY: docker-login docker-tag docker-push-tag docker-push-tag-latest
-
-#################################################
-# Targets for pushing the docker images
-#################################################
-
-# For all builds we build the docker container
-docker-master: docker
-
-# For all builds with a release candidate tag
-docker-release-candidate: docker-master docker-login docker-push-tag
-
-# For all builds with a release tag
-docker-release: docker-release-candidate docker-push-tag-latest
-
-.PHONY: docker-master docker-release-candidate docker-release
-
 #################################################
 # Targets for creating step artifacts
 #################################################
 
 # This command is called by travis directly *after* a successful build
-artifacts: docker-$(PUSHTYPE)
+artifacts: 
 
 .PHONY: artifacts