diff --git a/files/daemon.json b/files/daemon.json
new file mode 100644
index 0000000000000000000000000000000000000000..c01a9fa151f23c63983e30b04380f1383d613908
--- /dev/null
+++ b/files/daemon.json
@@ -0,0 +1,4 @@
+{
+	"registry-mirrors": ["http://127.0.0.1:5000"]
+}
+
diff --git a/files/docker-hub-cache.service b/files/docker-hub-cache.service
new file mode 100644
index 0000000000000000000000000000000000000000..7f8d137bedd850ea156b6e5f00a2c89204c92a43
--- /dev/null
+++ b/files/docker-hub-cache.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Docker Hub Cache
+After=docker.service
+Requires=docker.service
+
+[Service]
+TimeoutStartSec=0
+Restart=always
+ExecStartPre=-/usr/bin/docker stop registry
+ExecStartPre=-/usr/bin/docker rm registry
+ExecStart=/usr/bin/docker run -p 127.0.0.1:5000:5000 -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io --restart always --name registry registry:2
+
+[Install]
+WantedBy=default.target
diff --git a/handlers/main.yml b/handlers/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..75fd40705e9c27dc63a87e2aa5632d9d50f24bc8
--- /dev/null
+++ b/handlers/main.yml
@@ -0,0 +1,10 @@
+- name: update apt cache
+  apt: update_cache=yes
+- name: restart docker-hub-cache
+  service:
+    name: docker-hub-cache
+    enabled: true
+    state: restarted
+    daemon_reload: true
+- name: reload docker
+  service: name=docker state=reloaded
diff --git a/tasks/main.yml b/tasks/main.yml
index 2a1cfdd69c2572b72f72e3b9b7870fd123579c07..e5e4ffd111d79cf15f2ca69bbcef1ab1cfe3f442 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -6,10 +6,15 @@
 - name: add docker gpg key
   apt_key:
     url: https://download.docker.com/linux/{{ ansible_distribution|lower }}/gpg
+  notify: "update apt cache"
 
 - name: add docker repo
   apt_repository:
     repo: deb [arch=amd64] https://download.docker.com/linux/{{ ansible_distribution|lower }} {{ ansible_distribution_release|lower }}  stable
+  notify: "update apt cache"
+
+- name: flush handlers so apt cahe is updated
+  meta: flush_handlers
 
 - name: install docker components
   apt:
@@ -18,6 +23,24 @@
       - docker-ce-cli
       - containerd.io
 
+- name: setup docker hub proxy service
+  notify: restart docker-hub-cache
+  copy:
+    src: docker-hub-cache.service
+    dest: /etc/systemd/system/docker-hub-cache.service
+    mode: 0644
+    owner: root
+    group: root
+
+- name: copy daemon config
+  notify: reload docker
+  copy:
+    src: daemon.json
+    dest: /etc/docker/daemon.json
+    mode: 0644
+    owner: root
+    group: root
+
 - name: set periodic docker system prune
   cron:
     name: docker-prune