diff --git a/roles/docker-install/defaults/main.yaml b/roles/docker-install/defaults/main.yaml
new file mode 100644
index 0000000..014c9fa
--- /dev/null
+++ b/roles/docker-install/defaults/main.yaml
@@ -0,0 +1,5 @@
+proxy:
+  enabled: false
+  http:
+  https:
+  noproxy:
diff --git a/roles/docker-install/tasks/main.yaml b/roles/docker-install/tasks/main.yaml
new file mode 100644
index 0000000..925cc06
--- /dev/null
+++ b/roles/docker-install/tasks/main.yaml
@@ -0,0 +1,66 @@
+---
+- name: Ensuring docker and support packages are present
+  become: true
+  when: ansible_distribution == 'CentOS' or ansible_distribution == 'Red Hat Enterprise Linux'
+  yum:
+    name:
+      - docker.io
+      - runc
+    update_cache: yes
+    state: present
+
+- name: Ensuring docker and support packages are present
+  become: true
+  when: ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu'
+  apt:
+    name:
+      - docker.io
+      - runc
+    update_cache: yes
+    state: present
+
+- name: Ensure docker group exists
+  group:
+    name: docker
+    state: present
+
+- name: Add user "{{ ansible_user }}" to docker group
+  become: true
+  user:
+    name: "{{ ansible_user }}"
+    groups:
+    - docker
+    append: yes
+
+- name: Reset ssh connection to add docker group to user
+  meta: reset_connection
+  ignore_errors: true
+
+- block:
+    - name: Create docker directory
+      file:
+        path: /etc/systemd/system/docker.service.d/
+        state: directory
+        mode: '0755'
+
+    - name: Configure proxy for docker if enabled
+      template:
+        src: http-proxy-conf.j2
+        dest: /etc/systemd/system/docker.service.d/http-proxy.conf
+  when: proxy.enabled|bool == true
+  become: true
+
+- name: Start docker
+  become: true
+  systemd:
+    name: docker
+    state: restarted
+    daemon_reload: yes
+    enabled: true
+
+- name: Change group ownership on docker sock
+  become: true
+  file:
+    path: /var/run/docker.sock
+    group: docker
+
diff --git a/roles/docker-install/templates/http-proxy-conf.j2 b/roles/docker-install/templates/http-proxy-conf.j2
new file mode 100644
index 0000000..90d8e1d
--- /dev/null
+++ b/roles/docker-install/templates/http-proxy-conf.j2
@@ -0,0 +1,4 @@
+[Service]
+Environment="HTTP_PROXY={{ proxy.http }}"
+Environment="HTTPS_PROXY={{ proxy.https }}"
+Environment="NO_PROXY={{ proxy.noproxy }}"
diff --git a/roles/docker-install/tests/main.yml b/roles/docker-install/tests/main.yml
new file mode 100644
index 0000000..73c8163
--- /dev/null
+++ b/roles/docker-install/tests/main.yml
@@ -0,0 +1,13 @@
+- name: install docker
+  include_role:
+    name: docker-install
+
+- name: check if docker is installed
+  shell: "docker version"
+  register: docker_version
+
+- name: verify docker is installed
+  assert:
+    that:
+      - docker_version.rc == 0
+
diff --git a/tests/ansible/role-test-runner.yml b/tests/ansible/role-test-runner.yml
index 896faec..945c84c 100644
--- a/tests/ansible/role-test-runner.yml
+++ b/tests/ansible/role-test-runner.yml
@@ -11,6 +11,7 @@
         - redfish-emulator
         - airship-libvirt-gate
         - http-fileserver
+        - docker-install
     - name: run tests against defined roles
       include_tasks: "../../roles/{{ role_name }}/tests/main.yml"
       with_items: "{{ test_subject_roles | default(test_subject_roles_default) }}"
diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml
index 0fc873a..46d6c07 100644
--- a/zuul.d/jobs.yaml
+++ b/zuul.d/jobs.yaml
@@ -43,3 +43,10 @@
         - airship-libvirt-gate
     nodeset: ubuntu-single-airship
 
+- job:
+    name: zuul-airship-roles-test-docker
+    run: tests/ansible/role-test-runner.yml
+    vars:
+      test_subject_roles:
+        - docker-install
+    nodeset: ubuntu-single-airship
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
index a46ec00..648d838 100644
--- a/zuul.d/project.yaml
+++ b/zuul.d/project.yaml
@@ -3,11 +3,13 @@
       jobs:
         - ansible-lint-airship
         - zuul-airship-roles-test-libvirt
+        - zuul-airship-roles-test-docker
         - zuul-airship-roles-test-airship-gate
         - zuul-airship-roles-fileserver
     gate:
       jobs:
         - ansible-lint-airship
         - zuul-airship-roles-test-libvirt
+        - zuul-airship-roles-test-docker
         - zuul-airship-roles-test-airship-gate
         - zuul-airship-roles-fileserver