Repository: nervosnetwork/ckb (language: rust)

Issue:
Provide ARM64 Docker Image
## Feature Request
Currently, the Docker image available on [docker hub](https://hub.docker.com/r/nervos/ckb/tags) for our project only supports `linux/amd64` architecture. However, it would be beneficial to provide an `arm64` image as well.


Discussion / hints:

Fix patch:
diff --git a/Makefile b/Makefile
index 99d3d2bbe7..7207f827f8 100644
--- a/Makefile
+++ b/Makefile
@@ -156,18 +156,27 @@ prod-with-debug:
 
 .PHONY: docker
 docker: ## Build docker image
-	docker build -f docker/hub/Dockerfile -t nervos/ckb:$$(git describe) .
-	docker run --rm -it nervos/ckb:$$(git describe) --version
+	docker build -f docker/hub/Dockerfile -t nervos/ckb:x64-$$(git describe) .
+	docker run --rm -it nervos/ckb:x64-$$(git describe) --version
+
+.PHONY: docker-aarch64
+docker-aarch64:
+	docker build -f docker/hub/Dockerfile-aarch64 -t nervos/ckb:aarch64-$$(git describe) .
+	docker run --rm -it nervos/ckb:aarch64-$$(git describe) --version
 
 .PHONY: docker-publish
 docker-publish:
-	docker push nervos/ckb:$$(git describe)
-	docker tag nervos/ckb:$$(git describe) nervos/ckb:latest
-	docker push nervos/ckb:latest
+	docker push nervos/ckb:x64-$$(git describe)
+	docker push nervos/ckb:aarch64-$$(git describe)
+	docker manifest create nervos/ckb:latest nervos/ckb:x64-$$(git describe) nervos/ckb:aarch64-$$(git describe)
+	docker manifest push nervos/ckb:latest
 
 .PHONY: docker-publish-rc
 docker-publish-rc:
-	docker push nervos/ckb:$$(git describe)
+	docker push nervos/ckb:x64-$$(git describe)
+	docker push nervos/ckb:aarch64-$$(git describe)
+	docker manifest create nervos/ckb:$$(git describe) nervos/ckb:x64-$$(git describe) nervos/ckb:aarch64-$$(git describe)
+	docker manifest push nervos/ckb:$$(git describe)
 
 ##@ Code Quality
 .PHONY: fmt
diff --git a/docker/hub/Dockerfile-aarch64 b/docker/hub/Dockerfile-aarch64
new file mode 100644
index 0000000000..ba8c8c2b45
--- /dev/null
+++ b/docker/hub/Dockerfile-aarch64
@@ -0,0 +1,31 @@
+FROM nervos/ckb-docker-builder:aarch64-rust-1.71.1 as ckb-docker-builder
+
+WORKDIR /ckb
+COPY ./ .
+
+RUN make prod-docker
+
+FROM arm64v8/ubuntu
+LABEL description="Nervos CKB is a public permissionless blockchain, the common knowledge layer of Nervos network."
+LABEL maintainer="Nervos Core Dev <dev@nervos.org>"
+
+RUN groupadd -g 1000 ckb \
+ && useradd -m -u 1000 -g ckb -s /bin/sh ckb \
+ && mkdir -p /var/lib/ckb
+
+WORKDIR /var/lib/ckb
+
+COPY --from=ckb-docker-builder \
+     /usr/lib/aarch64-linux-gnu/libssl.so.* \
+     /usr/lib/aarch64-linux-gnu/libcrypto.so.* \
+     /usr/lib/aarch64-linux-gnu/
+COPY --from=ckb-docker-builder /ckb/target/prod/ckb /ckb/docker/docker-entrypoint.sh /bin/
+RUN chown -R ckb:ckb /var/lib/ckb \
+ && chmod 755 /var/lib/ckb
+
+USER ckb
+ENV CKB_CHAIN=mainnet
+
+EXPOSE 8114 8115
+VOLUME ["/var/lib/ckb"]
+ENTRYPOINT ["/bin/docker-entrypoint.sh"]


Test patch: