diff --git a/docker/freezer/freezer-api/Dockerfile.j2 b/docker/freezer/freezer-api/Dockerfile.j2
new file mode 100644
index 0000000000..5596f550f6
--- /dev/null
+++ b/docker/freezer/freezer-api/Dockerfile.j2
@@ -0,0 +1,49 @@
+FROM {{ namespace }}/{{ image_prefix }}freezer-base:{{ tag }}
+MAINTAINER {{ maintainer }}
+
+{% block freezer_api_header %}{% endblock %}
+
+{% import "macros.j2" as macros with context %}
+
+{% if install_type == 'binary' %}
+
+RUN echo '{{ install_type }} not yet available for {{ base_distro }}' \
+    && /bin/false
+
+{% elif install_type == 'source' %}
+
+    {% if base_distro in ['centos', 'oraclelinux', 'rhel'] %}
+        {% set freezer_api_packages = [
+            'mod_wsgi',
+            'httpd'
+        ] %}
+
+{{ macros.install_packages(freezer_api_packages | customizable("packages")) }}
+
+RUN sed -i -r 's,^(Listen 80),#\1,' /etc/httpd/conf/httpd.conf
+    {% elif base_distro in ['ubuntu', 'debian'] %}
+        {% set freezer_api_packages = [
+            'libapache2-mod-wsgi',
+            'apache2'
+        ] %}
+
+{{ macros.install_packages(freezer_api_packages | customizable("packages")) }}
+
+RUN echo > /etc/apache2/ports.conf
+    {% endif %}
+
+ADD freezer-api-archive /freezer-api-source
+RUN ln -s freezer-api-source/* freezer-api \
+    && /var/lib/kolla/venv/bin/pip --no-cache-dir install --upgrade -c requirements/upper-constraints.txt /freezer-api \
+    && cp -r /freezer-api/etc/freezer/* /etc/freezer/
+
+{% endif %}
+
+COPY extend_start.sh /usr/local/bin/kolla_freezer_extend_start
+RUN chmod 755 /usr/local/bin/kolla_freezer_extend_start
+
+{% block freezer_api_footer %}{% endblock %}
+{% block footer %}{% endblock %}
+{{ include_footer }}
+
+USER freezer
diff --git a/docker/freezer/freezer-api/extend_start.sh b/docker/freezer/freezer-api/extend_start.sh
new file mode 100755
index 0000000000..d12b6b7d45
--- /dev/null
+++ b/docker/freezer/freezer-api/extend_start.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases
+# of the KOLLA_BOOTSTRAP variable being set, including empty.
+if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
+    freezer-manage db update
+    exit 0
+fi
+
+if [[ "${KOLLA_BASE_DISTRO}" =~ debian|ubuntu ]]; then
+    # Loading Apache2 ENV variables
+    . /etc/apache2/envvars
+    rm -rf /var/run/apache2/*
+    APACHE_DIR="apache2"
+else
+    rm -rf /var/run/httpd/* /run/httpd/* /tmp/httpd*
+    APACHE_DIR="httpd"
+fi
diff --git a/docker/freezer/freezer-base/Dockerfile.j2 b/docker/freezer/freezer-base/Dockerfile.j2
new file mode 100644
index 0000000000..b4d42d24a6
--- /dev/null
+++ b/docker/freezer/freezer-base/Dockerfile.j2
@@ -0,0 +1,34 @@
+FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}
+MAINTAINER {{ maintainer }}
+
+{% block freezer_base_header %}{% endblock %}
+
+{% import "macros.j2" as macros with context %}
+
+{% if install_type == 'binary' %}
+
+RUN echo '{{ install_type }} not yet available for {{ base_distro }}' \
+    && /bin/false
+
+{% elif install_type == 'source' %}
+
+ADD freezer-base-archive /freezer-base-source
+RUN ln -s freezer-base-source/* freezer \
+    && useradd --user-group freezer \
+    && mkdir -p /etc/freezer /home/freezer \
+    && chown -R freezer: /etc/freezer /home/freezer \
+    && /var/lib/kolla/venv/bin/pip --no-cache-dir install --upgrade -c requirements/upper-constraints.txt /freezer \
+    && cp -r /freezer/etc/* /etc/freezer
+
+{% endif %}
+
+COPY freezer_sudoers /etc/sudoers.d/kolla_freezer_sudoers
+COPY extend_start.sh /usr/local/bin/kolla_extend_start
+
+RUN usermod -a -G kolla freezer \
+    && chmod 750 /etc/sudoers.d \
+    && chmod 640 /etc/sudoers.d/kolla_freezer_sudoers \
+    && touch /usr/local/bin/kolla_freezer_extend_start \
+    && chmod 755 /usr/local/bin/kolla_extend_start /usr/local/bin/kolla_freezer_extend_start
+
+{% block freezer_base_footer %}{% endblock %}
diff --git a/docker/freezer/freezer-base/extend_start.sh b/docker/freezer/freezer-base/extend_start.sh
new file mode 100755
index 0000000000..44a641dd72
--- /dev/null
+++ b/docker/freezer/freezer-base/extend_start.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+# Create log dir for freezer logs
+LOG_DIR="/var/log/kolla/freezer"
+if [[ ! -d "${LOG_DIR}" ]]; then
+    mkdir -p ${LOG_DIR}
+fi
+if [[ $(stat -c %U:%G ${LOG_DIR}) != "freezer:kolla" ]]; then
+    chown freezer:kolla ${LOG_DIR}
+fi
+if [[ $(stat -c %a ${LOG_DIR}) != "755" ]]; then
+    chmod 755 ${LOG_DIR}
+fi
+
+. /usr/local/bin/kolla_freezer_extend_start
diff --git a/docker/freezer/freezer-base/freezer_sudoers b/docker/freezer/freezer-base/freezer_sudoers
new file mode 100644
index 0000000000..8185fa5071
--- /dev/null
+++ b/docker/freezer/freezer-base/freezer_sudoers
@@ -0,0 +1 @@
+%kolla ALL=(root) NOPASSWD: /usr/bin/chown -R freezer\: /var/lib/freezer/, /bin/chown -R freezer\: /var/lib/freezer/
diff --git a/kolla/common/config.py b/kolla/common/config.py
index 03d2660f4c..5cb64c7885 100644
--- a/kolla/common/config.py
+++ b/kolla/common/config.py
@@ -190,6 +190,14 @@ SOURCES = {
         'type': 'url',
         'location': ('http://tarballs.openstack.org/designate/'
                      'designate-master.tar.gz')},
+    'freezer-api': {
+        'type': 'url',
+        'location': ('http://tarballs.openstack.org/freezer-api/'
+                     'freezer-api-master.tar.gz')},
+    'freezer-base': {
+        'type': 'url',
+        'location': ('http://tarballs.openstack.org/freezer/'
+                     'freezer-master.tar.gz')},
     'glance-base': {
         'type': 'url',
         'location': ('http://tarballs.openstack.org/glance/'
diff --git a/releasenotes/notes/add-freezer-74c9b538348cd62a.yaml b/releasenotes/notes/add-freezer-74c9b538348cd62a.yaml
new file mode 100644
index 0000000000..6fe09d04ae
--- /dev/null
+++ b/releasenotes/notes/add-freezer-74c9b538348cd62a.yaml
@@ -0,0 +1,3 @@
+---
+features:
+  - Add freezer Dockerfile
diff --git a/tests/test_build.py b/tests/test_build.py
index 1fd37b3d2b..431137c7df 100644
--- a/tests/test_build.py
+++ b/tests/test_build.py
@@ -75,7 +75,8 @@ class BuildTestCentosBinary(BuildTest, base.BaseTestCase):
                        "watcher-base",
                        "congress-base",
                        "bifrost-base",
-                       "cloudkitty-base"]
+                       "cloudkitty-base",
+                       "freezer-base"]
 
     def setUp(self):
         super(BuildTestCentosBinary, self).setUp()
@@ -103,7 +104,8 @@ class BuildTestUbuntuBinary(BuildTest, base.BaseTestCase):
                        "watcher-base",
                        "congress-base",
                        "bifrost-base",
-                       "cloudkitty-base"]
+                       "cloudkitty-base",
+                       "freezer-base"]
 
     def setUp(self):
         super(BuildTestUbuntuBinary, self).setUp()
@@ -131,7 +133,8 @@ class BuildTestOracleLinuxBinary(BuildTest, base.BaseTestCase):
                        "watcher-base",
                        "congress-base",
                        "bifrost-base",
-                       "cloudkitty-base"]
+                       "cloudkitty-base",
+                       "freezer-base"]
 
     def setUp(self):
         super(BuildTestOracleLinuxBinary, self).setUp()