diff --git a/CHANGELOG.md b/CHANGELOG.md
index 94284461..6c0c770c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+Unreleased
+-----------
+
+### Changed
+
+- Repository of container image has been moved to GitHub Container Registry (ghcr.io) from DockerHub https://github.com/rust-math/intel-mkl-src/pull/60
+
 0.6.0+mkl2020.1 - 2020-06-23
 =============================
 
diff --git a/docker/Makefile b/docker/Makefile
index 5707b5a0..8fadd8f6 100644
--- a/docker/Makefile
+++ b/docker/Makefile
@@ -1,28 +1,23 @@
-REGISTRY     := rustmath
-RUST_VERSION := 1.43.0
+TARGETS := rust ubuntu centos
 
-all: test ubuntu centos
+all: build
+build: $(foreach TARGET,$(TARGETS),build/$(TARGET))
+push:  $(foreach TARGET,$(TARGETS),push/$(TARGET))
 
-build:
-	docker build .                               \
-		--build-arg "RUST_VERSION=$(RUST_VERSION)" \
-		-t $(REGISTRY)/mkl-rust:$(RUST_VERSION)
+build/rust:
+	$(MAKE) -f rust.mk build
 
-push: build ubuntu centos
-	docker push $(REGISTRY)/mkl-rust:$(RUST_VERSION)
-	docker push $(REGISTRY)/mkl-centos:$(RUST_VERSION)
-	docker push $(REGISTRY)/mkl-ubuntu:$(RUST_VERSION)
+build/ubuntu:
+	$(MAKE) -f ubuntu.mk build
 
-test: build
-	docker run -it --rm $(REGISTRY)/mkl-rust:$(RUST_VERSION) pkg-config --libs mkl-dynamic-lp64-iomp
-	docker run -it --rm $(REGISTRY)/mkl-rust:$(RUST_VERSION) ldconfig -p | grep mkl
+build/centos:
+	$(MAKE) -f centos.mk build
 
-ubuntu:
-	docker build . -f $@.Dockerfile              \
-		--build-arg "RUST_VERSION=$(RUST_VERSION)" \
-		-t $(REGISTRY)/mkl-ubuntu:$(RUST_VERSION)
+push/rust: build/rust
+	$(MAKE) -f rust.mk push
 
-centos:
-	docker build . -f $@.Dockerfile              \
-		--build-arg "RUST_VERSION=$(RUST_VERSION)" \
-		-t $(REGISTRY)/mkl-centos:$(RUST_VERSION)
+push/ubuntu: build/ubuntu
+	$(MAKE) -f ubuntu.mk push
+
+push/centos: build/centos
+	$(MAKE) -f centos.mk push
diff --git a/docker/centos.mk b/docker/centos.mk
new file mode 100644
index 00000000..c320316b
--- /dev/null
+++ b/docker/centos.mk
@@ -0,0 +1,3 @@
+HERE   := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
+TARGET := mkl-centos
+include $(HERE)/common.mk
diff --git a/docker/common.mk b/docker/common.mk
new file mode 100644
index 00000000..6a5a5faf
--- /dev/null
+++ b/docker/common.mk
@@ -0,0 +1,16 @@
+TOP  := $(shell git rev-parse --show-toplevel)
+HERE := $(TOP)/docker
+
+REGISTRY     := ghcr.io/rust-math/intel-mkl-src
+RUST_VERSION := 1.49.0
+
+all: build
+
+build:
+	docker build $(HERE)                         \
+		--build-arg "RUST_VERSION=$(RUST_VERSION)" \
+		-t $(REGISTRY)/$(TARGET):$(RUST_VERSION) \
+		-f $(TARGET).Dockerfile
+
+push: build
+	docker push $(REGISTRY)/$(TARGET):$(RUST_VERSION)
diff --git a/docker/centos.Dockerfile b/docker/mkl-centos.Dockerfile
similarity index 100%
rename from docker/centos.Dockerfile
rename to docker/mkl-centos.Dockerfile
diff --git a/docker/Dockerfile b/docker/mkl-rust.Dockerfile
similarity index 100%
rename from docker/Dockerfile
rename to docker/mkl-rust.Dockerfile
diff --git a/docker/ubuntu.Dockerfile b/docker/mkl-ubuntu.Dockerfile
similarity index 100%
rename from docker/ubuntu.Dockerfile
rename to docker/mkl-ubuntu.Dockerfile
diff --git a/docker/rust.mk b/docker/rust.mk
new file mode 100644
index 00000000..c6784f1b
--- /dev/null
+++ b/docker/rust.mk
@@ -0,0 +1,3 @@
+HERE   := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
+TARGET := mkl-rust
+include $(HERE)/common.mk
diff --git a/docker/ubuntu.mk b/docker/ubuntu.mk
new file mode 100644
index 00000000..3d279694
--- /dev/null
+++ b/docker/ubuntu.mk
@@ -0,0 +1,3 @@
+HERE   := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
+TARGET := mkl-ubuntu
+include $(HERE)/common.mk
diff --git a/intel-mkl-tool/Makefile b/intel-mkl-tool/Makefile
index c179a58b..7e87fe33 100644
--- a/intel-mkl-tool/Makefile
+++ b/intel-mkl-tool/Makefile
@@ -1,18 +1,19 @@
 HERE          := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
-RUST_VERSION  := 1.43.0
+REGISTRY      := ghcr.io/rust-math/intel-mkl-src
+RUST_VERSION  := 1.49.0
 DOCKER_OPTION := --rm -u $(shell id -u):$(shell id -g) -v $(HERE):/src
 
 test:
-	docker run $(DOCKER_OPTION) --env CARGO_HOME=/src/.cargo-cache rustmath/mkl-rust:$(RUST_VERSION) cargo test with_mkl -- --ignored
+	docker run $(DOCKER_OPTION) --env CARGO_HOME=/src/.cargo-cache $(REGISTRY)/mkl-rust:$(RUST_VERSION) cargo test with_mkl -- --ignored
 
 seek:
-	docker run $(DOCKER_OPTION) --env CARGO_HOME=/src/.cargo-cache rustmath/mkl-rust:$(RUST_VERSION) cargo run --release -- seek
+	docker run $(DOCKER_OPTION) --env CARGO_HOME=/src/.cargo-cache $(REGISTRY)/mkl-rust:$(RUST_VERSION) cargo run --release -- seek
 
 package:
-	docker run $(DOCKER_OPTION) --env CARGO_HOME=/src/.cargo-cache rustmath/mkl-rust:$(RUST_VERSION) cargo run --release -- package
+	docker run $(DOCKER_OPTION) --env CARGO_HOME=/src/.cargo-cache $(REGISTRY)/mkl-rust:$(RUST_VERSION) cargo run --release -- package
 
 seek-ubuntu:
-	docker run $(DOCKER_OPTION) --env CARGO_HOME=/src/.cargo-ubuntu rustmath/mkl-ubuntu:$(RUST_VERSION) cargo run --release -- seek
+	docker run $(DOCKER_OPTION) --env CARGO_HOME=/src/.cargo-ubuntu $(REGISTRY)/mkl-ubuntu:$(RUST_VERSION) cargo run --release -- seek
 
 seek-centos:
-	docker run $(DOCKER_OPTION) --env CARGO_HOME=/src/.cargo-centos rustmath/mkl-centos:$(RUST_VERSION) cargo run --release -- seek
+	docker run $(DOCKER_OPTION) --env CARGO_HOME=/src/.cargo-centos $(REGISTRY)/mkl-centos:$(RUST_VERSION) cargo run --release -- seek