diff --git a/containers/template_engine/templates/containers.makefile.j2 b/containers/template_engine/templates/containers.makefile.j2
new file mode 100644
index 0000000..48a191a
--- /dev/null
+++ b/containers/template_engine/templates/containers.makefile.j2
@@ -0,0 +1,73 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+#################### START VARS #################
+DPDK_CI_CONTAINER_BUILDER_PROGRAM?=podman
+DPDK_CI_CONTAINERS_EXTRA_PUSH_ARGS?=
+DPDK_CI_CONTAINERS_REGISTRY_HOSTNAME?={{ registry_hostname }}
+
+#################### END VARS #################
+
+.PHONY: build_all
+build_all:{% for container in dockerfiles.targets %} build_{{ container.name }}{% endfor %}
+
+.PHONY: push_image_all
+push_image_all:{% for container in dockerfiles.targets %} push_image_{{ container.name }}{% endfor %}
+
+.PHONY: push_manifest_all
+push_manifest_all:
+{%- if is_builder %}
+	echo "Disabled: Builder mode was enabled."
+{%- else -%}
+	{% for container in dockerfiles.targets %} push_manifest_{{ container.name }}{% endfor %}
+{%- endif %}
+
+{%- macro push_indx(container, is_docker) %}
+	{%- for tag in container.tags -%}
+	{%- set formatted_tag = tag | replace('$R', registry_hostname) | replace('$T', timestamp) | replace('$N', container.name) | replace(':', '\\:') -%}
+	{%- set trunk_tag = formatted_tag.split('/')[1] -%}
+	{%- if is_docker -%}
+		{%- set ref_tag = formatted_tag -%}
+		{%- set push_xargs = '' -%}
+	{%- else -%}
+		{%- set ref_tag = trunk_tag -%}
+		{%- set push_xargs = ' docker\://%s' | format(formatted_tag) -%}
+	{%- endif -%}
+	$(DPDK_CI_CONTAINER_BUILDER_PROGRAM) manifest rm {{ ref_tag }} || echo "Image {{ ref_tag }} did not exist initially."
+	$(DPDK_CI_CONTAINER_BUILDER_PROGRAM) manifest create {{ ref_tag }}
+	{%- for platform in container.platforms -%}
+	{%- set plat_tag = "%s/%s\:image-%s-%s" | format(registry_hostname, container.name, platform.replace('/', ''), timestamp) %} \
+		{{ plat_tag -}} {% endfor %}
+	$(DPDK_CI_CONTAINER_BUILDER_PROGRAM) manifest push $(DPDK_CI_CONTAINERS_EXTRA_PUSH_ARGS) {{ ref_tag }} {{- push_xargs }}
+	{% endfor -%}
+{% endmacro %}
+
+{% for container in dockerfiles.targets %}
+#################### START {{ container.name }} #####################
+  {% set container_id = container.name %}
+.PHONY: build_{{ container_id }}
+
+build_{{ container_id }}:
+	{%- for platform in container.platforms -%}
+	{%- set plat_tag = "%s/%s\:image-%s-%s" | format(registry_hostname, container_id, platform.replace('/', ''), timestamp) %}
+	$(DPDK_CI_CONTAINER_BUILDER_PROGRAM) build --target {{container.name}} --platform {{ platform }} \
+		-t {{ plat_tag }} -f {{ container_id }}.dockerfile $(CURDIR) {%- endfor %}
+
+.PHONY: push_image_{{ container_id }}
+push_image_{{ container_id }}: build_{{ container_id }}
+	{%- for platform in container.platforms -%}
+	{%- set plat_tag = "%s/%s\:image-%s-%s" | format(registry_hostname, container_id, platform.replace('/', ''), timestamp) %}
+	$(DPDK_CI_CONTAINER_BUILDER_PROGRAM) push $(DPDK_CI_CONTAINERS_EXTRA_PUSH_ARGS) {{ plat_tag }}
+	{%- endfor %}
+{% if not is_builder %}
+.PHONY: push_manifest_{{ container_id }}
+push_manifest_{{ container_id }}:
+{%- if host_arch_only and not is_builder %} push_image_{{ container_id }}{% endif %}
+ifeq ($(DPDK_CI_CONTAINER_BUILDER_PROGRAM), docker)
+	{{ push_indx(container, true) }}
+else
+	{{ push_indx(container, false) }}
+endif
+{% endif %}
+
+#################### END {{ container.name }} #####################
+{% endfor %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/alpine.dockerfile.j2 b/containers/template_engine/templates/containers/alpine.dockerfile.j2
new file mode 100644
index 0000000..2d6d4b6
--- /dev/null
+++ b/containers/template_engine/templates/containers/alpine.dockerfile.j2
@@ -0,0 +1,3 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/base.dockerfile.j2' %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/arch.dockerfile.j2 b/containers/template_engine/templates/containers/arch.dockerfile.j2
new file mode 100644
index 0000000..38cee37
--- /dev/null
+++ b/containers/template_engine/templates/containers/arch.dockerfile.j2
@@ -0,0 +1,39 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/base.dockerfile.j2' %}
+
+{% block pre_package_manager %}
+RUN pacman-key --init
+RUN pacman -Sy --noconfirm archlinux-keyring && pacman -Su --noconfirm
+{% endblock %}
+
+
+{% block pip_installs %}
+RUN mkdir -p ~/.config/pip \
+    && printf '[global]\nbreak-system-packages = true\n' >> ~/.config/pip/pip.conf \
+    && python3 -m pip install ninja pyelftools
+{% endblock %}
+
+{% block before_meson_after_pip %}
+# add user for building aur packages
+RUN useradd builder && \
+    mkdir /home/builder && \
+    chown builder:builder /home/builder
+
+# switch user to make packages from aur
+USER builder
+
+# clone and make rdma-core packages
+RUN cd /home/builder && git clone https://aur.archlinux.org/rdma-core.git
+RUN cd /home/builder/rdma-core && makepkg
+
+USER root
+
+RUN cd /home/builder/rdma-core && pacman --noconfirm -U rdma-core-*.pkg.tar.*
+
+RUN rm -rf /home/builder
+{% endblock %}
+
+{% block install_libabigail %}
+{# Installed via package manager #}
+{% endblock install_libabigail %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/base.dockerfile.j2 b/containers/template_engine/templates/containers/base.dockerfile.j2
new file mode 100644
index 0000000..9181ca2
--- /dev/null
+++ b/containers/template_engine/templates/containers/base.dockerfile.j2
@@ -0,0 +1,126 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+# ------------------------ Begin {{ target.name }} ------------------------------------------------
+
+{%- set build_base_img = target.name + "_base" %}
+FROM {{ target.base_image }} as {% if build_abi and not target.force_disable_abi -%}
+{{ build_base_img }}
+{%- else -%}
+{{ target.name }}
+{%- endif %}
+
+ENV CCACHE_DIR=/ccache/
+ENV CCACHE_COMPILERCHECK=content
+ENV CCACHE_NAMESPACE="{{ target.name }}-{{ build_timestamp }}"
+ENV BUILD_TIMESTAMP="{{ build_timestamp }}"
+
+{% block extra_env_vars -%}{%- endblock extra_env_vars %}
+
+{% block pre_package_manager -%}{%- endblock pre_package_manager %}
+
+# Install packages
+RUN {{ target.package_manager_command }} {{ target.packages | join(" ") }}
+
+# Installs from pip
+{% block pip_installs -%}{%- endblock pip_installs %}
+
+# Extra setup after python libs are installed
+{% block before_meson_after_pip -%}{%- endblock %}
+
+# install libabigail
+{% block install_libabigail %}
+{% if build_libabigail and build_abi and (not "force_disable_abi" in target or not target.force_disable_abi) %}
+COPY libabigail /libabigail
+RUN --mount=type=cache,target=/ccache,z cd /libabigail
+{%- if "libabigail_revision" in target %} && git checkout {{ target.libabigail_revision }} {%- endif %} && mkdir build && autoreconf -i && cd build && ../configure --prefix=/usr/local && make all install && \
+    ldconfig && cd / && rm -rf /libabigail
+{% else %}
+#   libabigail build is disabled
+{% endif %}
+{% endblock install_libabigail %}
+
+# cross compilation setup
+{% block cross_compilation_setup %}
+{% endblock cross_compilation_setup %}
+
+# Copy externally pulled DPDK into the container
+RUN mkdir /dpdk
+COPY dpdk-stable /dpdk-stable
+
+# Install meson
+{% block install_meson %}
+# Install meson from dpdk main
+# Writes to the mount are discarded once the container is built and is not shared with other containers or the host
+COPY dpdk /dpdk
+RUN --mount=type=cache,target=/ccache,z cd /dpdk && chown -R root /dpdk && git checkout main && sh .ci/linux-setup.sh
+RUN rm -rf /dpdk
+{% endblock install_meson %}
+
+ENV RTE_KERNELDIR CHANGE_ME
+
+RUN mkdir /references
+WORKDIR /references
+RUN touch abi_versions
+# build the abi
+{% if build_abi and not target.force_disable_abi %}
+    {% block build_abi %}
+        {% for version in abi.versions %}
+            {%- set abi_version_str = (version.abi_version.major|string) + "." + (version.abi_version.minor|string) -%}
+            {%- set abi_stage_name = target.name + "_" + abi_version_str -%}
+            {%- set abi_folder = "/references/" + abi_version_str + "_reference" %}
+            {%- set meets_version_requirements = "minimum_dpdk_version" in target and version.dpdk_version.major >= target.minimum_dpdk_version.major and version.dpdk_version.minor >= target.minimum_dpdk_version.minor and version.dpdk_version.revision >= target.minimum_dpdk_version.revision -%}
+            {% if meets_version_requirements %}
+
+FROM {{ build_base_img }} AS {{ abi_stage_name }}
+RUN echo '{{ abi_version_str }}' >> abi_versions
+RUN mkdir -p {{ abi_folder }}
+# compile DPDK
+RUN --mount=type=cache,target=/ccache,z \
+    mkdir -p /dpdk-stable/build && rm -rf /dpdk-stable/build && cd /dpdk-stable && git clean -xfd && git fetch --tags && git checkout {{ version.dpdk_version.git_tag }} && cd /references && \
+    meson /dpdk-stable /dpdk-stable/build {% if "cross_file" in target -%}
+    --cross-file=/dpdk-stable/{{ target.cross_file }}
+    {%- endif %} -Dexamples=all --buildtype=debugoptimized && DESTDIR={{ abi_folder }} ninja {% if ninja_workers -%}
+    -j {{ ninja_workers }} {% endif -%} -C /dpdk-stable/build install && \
+    {%- if (abi_version_str == '22.0' or abi_version_str == '23.10')  %}
+    bash /dpdk-stable/devtools/gen-abi.sh {{ abi_folder }} && mv {{ abi_folder }}/usr/local/include {{ abi_folder }} && \
+    rm -rf {{ abi_folder }}/usr
+    {%- else %}
+    find {{ abi_folder }}/usr/local -name '*.a' -delete && rm -rf {{ abi_folder }}/usr/local/bin && rm -rf {{ abi_folder }}/usr/local/share
+    {%- endif %} && rm -rf /dpdk-stable/build
+            {% endif %}
+        {% endfor %}
+
+FROM {{ build_base_img }} AS {{ target.name }}
+    {% for version in abi.versions %}
+        {%- set abi_version_str = (version.abi_version.major|string) + "." + (version.abi_version.minor|string) -%}
+        {%- set abi_stage_name = target.name + "_" + abi_version_str -%}
+        {%- set abi_folder = "/references/" + abi_version_str + "_reference" %}
+        {%- set meets_version_requirements = "minimum_dpdk_version" in target and version.dpdk_version.major >= target.minimum_dpdk_version.major and version.dpdk_version.minor >= target.minimum_dpdk_version.minor and version.dpdk_version.revision >= target.minimum_dpdk_version.revision -%}
+        {% if meets_version_requirements %}
+RUN mkdir -p {{ abi_folder }}
+COPY --from={{ abi_stage_name }} {{ abi_folder }} {{ abi_folder }}
+        {%- endif %}
+    {%- endfor %}
+    {% endblock build_abi %}
+RUN chmod -R 777 .
+{% else %}
+{% endif %}
+
+# Embed extra target information into the container
+{% if 'extra_information' in target %}
+RUN echo '{{ target.extra_information | tojson }}' > /container_info.json
+{% endif %}
+
+WORKDIR /
+
+COPY dpdk-ci dpdk-ci
+
+{# Block for setting up anything related to the CI scripts #}
+{% block ci_setup -%}
+{%- endblock ci_setup %}
+
+{% block copy_extras -%}
+COPY scripts scripts
+{%- endblock copy_extras %}
+
+# ------------------------ End {{ target.name }} ------------------------------------------------
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/centos8.dockerfile.j2 b/containers/template_engine/templates/containers/centos8.dockerfile.j2
new file mode 100644
index 0000000..a9eafb0
--- /dev/null
+++ b/containers/template_engine/templates/containers/centos8.dockerfile.j2
@@ -0,0 +1,21 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/redhat_family.dockerfile.j2' %}
+
+{% block pre_package_manager %}
+# For ninja-build, meson, libmnl-devel, nasm, and CUnit-devel
+RUN dnf install -y dnf-command\(config-manager\) dnf-plugins-core
+# Install EPEL repository for ccache
+RUN dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
+# Enable powertools repository for libpcap-devel
+RUN dnf config-manager --set-enabled powertools
+{% endblock %}
+
+{% block pip_installs %}
+RUN python3 -m pip install --upgrade pip
+RUN python3 -m pip install pyelftools ninja
+{% endblock %}
+
+{% block install_libabigail %}
+{# Install via package manager #}
+{% endblock install_libabigail %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/centos9.dockerfile.j2 b/containers/template_engine/templates/containers/centos9.dockerfile.j2
new file mode 100644
index 0000000..47e6578
--- /dev/null
+++ b/containers/template_engine/templates/containers/centos9.dockerfile.j2
@@ -0,0 +1,17 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/redhat_family.dockerfile.j2' %}
+
+{% block pre_package_manager %}
+# For ninja-build, meson, libmnl-devel, nasm, and CUnit-devel
+RUN dnf install -y dnf-command\(config-manager\) dnf-plugins-core
+# Install EPEL repository for ccache
+RUN dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
+# Enable powertools repository for libpcap-devel
+RUN dnf config-manager --set-enabled crb
+{% endblock %}
+
+{% block pip_installs %}
+RUN python3 -m pip install --upgrade pip
+RUN python3 -m pip install pyelftools ninja
+{% endblock %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/debian.dockerfile.j2 b/containers/template_engine/templates/containers/debian.dockerfile.j2
new file mode 100644
index 0000000..75eb3df
--- /dev/null
+++ b/containers/template_engine/templates/containers/debian.dockerfile.j2
@@ -0,0 +1,7 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/base.dockerfile.j2' %}
+
+{% block pre_package_manager %}
+ENV DEBIAN_FRONTEND=noninteractive
+{% endblock %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/debian10.dockerfile.j2 b/containers/template_engine/templates/containers/debian10.dockerfile.j2
new file mode 100644
index 0000000..b47fb76
--- /dev/null
+++ b/containers/template_engine/templates/containers/debian10.dockerfile.j2
@@ -0,0 +1,3 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/debian.dockerfile.j2' %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/debian11.dockerfile.j2 b/containers/template_engine/templates/containers/debian11.dockerfile.j2
new file mode 100644
index 0000000..b47fb76
--- /dev/null
+++ b/containers/template_engine/templates/containers/debian11.dockerfile.j2
@@ -0,0 +1,3 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/debian.dockerfile.j2' %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/debian11_arm_ipsec.dockerfile.j2 b/containers/template_engine/templates/containers/debian11_arm_ipsec.dockerfile.j2
new file mode 100644
index 0000000..5b572d2
--- /dev/null
+++ b/containers/template_engine/templates/containers/debian11_arm_ipsec.dockerfile.j2
@@ -0,0 +1,15 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/debian11.dockerfile.j2' %}
+
+{% block before_meson_after_pip %}
+WORKDIR /opt
+
+RUN git clone --depth 1 --branch SECLIB-IPSEC-2022.05.25 https://git.gitlab.arm.com/arm-reference-solutions/ipsec-mb.git
+
+WORKDIR /opt/ipsec-mb
+RUN make -j $(nproc) && make install
+
+WORKDIR /
+
+{% endblock before_meson_after_pip %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/debian_bullseye.dockerfile.j2 b/containers/template_engine/templates/containers/debian_bullseye.dockerfile.j2
new file mode 100644
index 0000000..b47fb76
--- /dev/null
+++ b/containers/template_engine/templates/containers/debian_bullseye.dockerfile.j2
@@ -0,0 +1,3 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/debian.dockerfile.j2' %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/debian_buster.dockerfile.j2 b/containers/template_engine/templates/containers/debian_buster.dockerfile.j2
new file mode 100644
index 0000000..b47fb76
--- /dev/null
+++ b/containers/template_engine/templates/containers/debian_buster.dockerfile.j2
@@ -0,0 +1,3 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/debian.dockerfile.j2' %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/fedora.dockerfile.j2 b/containers/template_engine/templates/containers/fedora.dockerfile.j2
new file mode 100644
index 0000000..7daba85
--- /dev/null
+++ b/containers/template_engine/templates/containers/fedora.dockerfile.j2
@@ -0,0 +1,11 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/redhat_family.dockerfile.j2' %}
+
+{%- block pip_installs -%}
+RUN python3 -m pip install ninja
+{%- endblock -%}
+
+{% block install_libabigail %}
+# installed by package manager
+{% endblock install_libabigail %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/fedora36_clang.dockerfile.j2 b/containers/template_engine/templates/containers/fedora36_clang.dockerfile.j2
new file mode 100644
index 0000000..7a76f72
--- /dev/null
+++ b/containers/template_engine/templates/containers/fedora36_clang.dockerfile.j2
@@ -0,0 +1,7 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/fedora.dockerfile.j2' %}
+
+{% block extra_env_vars -%}
+ENV CC=clang
+{%- endblock extra_env_vars %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/fedora_clang.dockerfile.j2 b/containers/template_engine/templates/containers/fedora_clang.dockerfile.j2
new file mode 100644
index 0000000..9d5026a
--- /dev/null
+++ b/containers/template_engine/templates/containers/fedora_clang.dockerfile.j2
@@ -0,0 +1,8 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/fedora.dockerfile.j2' %}
+
+{% block extra_env_vars -%}
+#ENV CCACHE_CC=clang
+ENV CC=clang
+{%- endblock extra_env_vars %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/fedora_coverity.dockerfile.j2 b/containers/template_engine/templates/containers/fedora_coverity.dockerfile.j2
new file mode 100644
index 0000000..f17eb7a
--- /dev/null
+++ b/containers/template_engine/templates/containers/fedora_coverity.dockerfile.j2
@@ -0,0 +1,10 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/fedora.dockerfile.j2' %}
+
+{% block copy_extras -%}
+COPY scripts scripts
+COPY coverity coverity
+
+ENTRYPOINT /scripts/coverity.sh
+{%- endblock copy_extras %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/opensuse.dockerfile.j2 b/containers/template_engine/templates/containers/opensuse.dockerfile.j2
new file mode 100644
index 0000000..47b3181
--- /dev/null
+++ b/containers/template_engine/templates/containers/opensuse.dockerfile.j2
@@ -0,0 +1,10 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/rpm.dockerfile.j2' %}
+
+{% block pip_installs %}
+{% endblock %}
+
+{% block install_libabigail %}
+{# Install via package manager #}
+{% endblock install_libabigail %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/redhat_family.dockerfile.j2 b/containers/template_engine/templates/containers/redhat_family.dockerfile.j2
new file mode 100644
index 0000000..6c6c22a
--- /dev/null
+++ b/containers/template_engine/templates/containers/redhat_family.dockerfile.j2
@@ -0,0 +1,5 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/rpm.dockerfile.j2' %}
+
+{# All of the distros in the Redhat Linux Lineage, ex: RHEL, Fedora, CentOS #}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/rhel.dockerfile.j2 b/containers/template_engine/templates/containers/rhel.dockerfile.j2
new file mode 100644
index 0000000..e8dbf19
--- /dev/null
+++ b/containers/template_engine/templates/containers/rhel.dockerfile.j2
@@ -0,0 +1,16 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/redhat_family.dockerfile.j2' %}
+
+{% block pip_installs %}
+RUN python3 -m pip install pyelftools
+{% endblock %}
+
+
+{% block before_meson_after_pip %}
+RUN yum clean all
+{% endblock %}
+
+{% block install_libabigail %}
+{# Install via package manager #}
+{% endblock install_libabigail %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/rhel7.dockerfile.j2 b/containers/template_engine/templates/containers/rhel7.dockerfile.j2
new file mode 100644
index 0000000..bfe7309
--- /dev/null
+++ b/containers/template_engine/templates/containers/rhel7.dockerfile.j2
@@ -0,0 +1,15 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/rhel.dockerfile.j2' %}
+
+{% block pre_package_manager %}
+# repolist is needed to refresh the RHEL repos from the host this is being built on
+RUN yum repolist
+# Yes this next step is gross, there is no better way to enable the repos in the UBI containers.
+RUN sed -i '/\[rhel-7-server-extras-rpms\]/,/^ *\[/ s/enabled\ =\ 0/enabled\ =\ 1/' /etc/yum.repos.d/redhat.repo \
+    && sed -i '/\[rhel-7-server-optional-rpms\]/,/^ *\[/ s/enabled\ =\ 0/enabled\ =\ 1/' /etc/yum.repos.d/redhat.repo
+RUN yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
+RUN yum update -y
+
+RUN yum groupinstall -y 'Development Tools'
+{% endblock %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/rhel8.dockerfile.j2 b/containers/template_engine/templates/containers/rhel8.dockerfile.j2
new file mode 100644
index 0000000..7f2451c
--- /dev/null
+++ b/containers/template_engine/templates/containers/rhel8.dockerfile.j2
@@ -0,0 +1,15 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/rhel.dockerfile.j2' %}
+
+{% block pre_package_manager %}
+# repolist is needed to refresh the RHEL repos from the host this is being built on
+RUN yum repolist
+RUN yum update -y
+RUN yum config-manager --set-enable codeready-builder-for-rhel-8-$(uname -i)-rpms
+
+# Required to install ccache
+RUN yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm && yum upgrade -y
+
+RUN yum groupinstall -y 'Development Tools'
+{% endblock %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/rhel9.dockerfile.j2 b/containers/template_engine/templates/containers/rhel9.dockerfile.j2
new file mode 100644
index 0000000..5df9bca
--- /dev/null
+++ b/containers/template_engine/templates/containers/rhel9.dockerfile.j2
@@ -0,0 +1,19 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/rhel.dockerfile.j2' %}
+
+{% block pre_package_manager %}
+# repolist is needed to refresh the RHEL repos from the host this is being built on
+RUN yum repolist
+RUN yum config-manager --set-enable codeready-builder-for-rhel-9-$(uname -i)-rpms
+RUN yum update -y
+
+# Required to install ccache
+RUN yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && yum upgrade -y
+
+RUN yum groupinstall -y 'Development Tools'
+{% endblock %}
+
+{% block pip_installs %}
+RUN python3 -m pip install pyelftools ninja
+{% endblock %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/rpm.dockerfile.j2 b/containers/template_engine/templates/containers/rpm.dockerfile.j2
new file mode 100644
index 0000000..2d6d4b6
--- /dev/null
+++ b/containers/template_engine/templates/containers/rpm.dockerfile.j2
@@ -0,0 +1,3 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/base.dockerfile.j2' %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/ubuntu.dockerfile.j2 b/containers/template_engine/templates/containers/ubuntu.dockerfile.j2
new file mode 100644
index 0000000..b47fb76
--- /dev/null
+++ b/containers/template_engine/templates/containers/ubuntu.dockerfile.j2
@@ -0,0 +1,3 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/debian.dockerfile.j2' %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/ubuntu20.04.dockerfile.j2 b/containers/template_engine/templates/containers/ubuntu20.04.dockerfile.j2
new file mode 100644
index 0000000..0b57abf
--- /dev/null
+++ b/containers/template_engine/templates/containers/ubuntu20.04.dockerfile.j2
@@ -0,0 +1,12 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/ubuntu.dockerfile.j2' %}
+
+{% block pip_installs -%}
+RUN python3 -m pip install --no-cache-dir requests
+{%- endblock pip_installs %}
+
+{% block before_meson_after_pip -%}
+ADD https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-linux.zip /
+ADD https://sonarcloud.io/static/cpp/build-wrapper-linux-x86.zip /
+{%- endblock %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/ubuntu22.04.dockerfile.j2 b/containers/template_engine/templates/containers/ubuntu22.04.dockerfile.j2
new file mode 100644
index 0000000..617e0b6
--- /dev/null
+++ b/containers/template_engine/templates/containers/ubuntu22.04.dockerfile.j2
@@ -0,0 +1,3 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/ubuntu.dockerfile.j2' %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/ubuntu_acvp_fips.dockerfile.j2 b/containers/template_engine/templates/containers/ubuntu_acvp_fips.dockerfile.j2
new file mode 100644
index 0000000..e4d2078
--- /dev/null
+++ b/containers/template_engine/templates/containers/ubuntu_acvp_fips.dockerfile.j2
@@ -0,0 +1,32 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/ubuntu20.04.dockerfile.j2' %}
+
+{% block before_meson_after_pip %}
+{#- This function renders the parent "before_meson_after_pip" block. -#}
+{{ super() }}
+
+# Build and install the Intel ipsec multibuffer library
+RUN git clone "https://github.com/intel/intel-ipsec-mb.git" && \
+    cd intel-ipsec-mb && \
+    git checkout v1.3 && \
+    make -j 4 && \
+    make install && \
+    cd .. && \
+    rm -rf intel-ipsec-mb
+
+# Get FIPS Object Module
+RUN curl -o openssl-fips-2.0.16.tar.gz https://www.openssl.org/source/openssl-fips-2.0.16.tar.gz && \
+    tar xvfm openssl-fips-2.0.16.tar.gz && \
+    cd openssl-fips-2.0.16 && \
+    ./config && \
+    make && \
+    make install && \
+    cd .. && \
+    rm -rf openssl-fips-2.0.16
+
+{% endblock before_meson_after_pip %}
+
+{% block ci_setup -%}
+RUN pip3 install -r /dpdk-ci/tools/acvp/requirements.txt
+{%- endblock ci_setup %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/ubuntu_cross.dockerfile.j2 b/containers/template_engine/templates/containers/ubuntu_cross.dockerfile.j2
new file mode 100644
index 0000000..21cf372
--- /dev/null
+++ b/containers/template_engine/templates/containers/ubuntu_cross.dockerfile.j2
@@ -0,0 +1,11 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/ubuntu20.04.dockerfile.j2' %}
+
+{% block cross_compilation_setup %}
+# Link ccache to different compilers
+    # aarch64 -> ccache
+RUN ln -s $(which ccache) /usr/local/bin/aarch64-linux-gnu-gcc && \
+    # aarch32 -> ccache
+    ln -s $(which ccache) /usr/local/bin/arm-linux-gnueabihf-gcc
+{% endblock cross_compilation_setup %}
\ No newline at end of file
diff --git a/containers/template_engine/templates/containers/ubuntu_sve.dockerfile.j2 b/containers/template_engine/templates/containers/ubuntu_sve.dockerfile.j2
new file mode 100644
index 0000000..8796a16
--- /dev/null
+++ b/containers/template_engine/templates/containers/ubuntu_sve.dockerfile.j2
@@ -0,0 +1,12 @@
+{#- SPDX-License-Identifier: BSD-3-Clause -#}
+{#- Copyright (c) 2023 University of New Hampshire -#}
+{% extends 'containers/ubuntu20.04.dockerfile.j2' %}
+{% block cross_compilation_setup %}
+RUN ln -s $(which ccache) /usr/local/bin/gcc-10
+{% endblock cross_compilation_setup %}
+
+{% block build_abi %}
+# ABI is disabled for this container
+
+FROM {{ build_base_img }} AS {{ target.name }}
+{% endblock build_abi %}
\ No newline at end of file
