diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1eb05f7dc4f1afcbb989b9bb305719fbef902d61
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,8 @@
+include:
+  - project: oceanids/c2/infrastructure/ci-scripts
+    ref: master
+    file: python-microservice/all.yml
+
+variables:
+  DOCKER_IMAGE_NAME: backbone-message-format
+  TEST_DOCKER_COMPOSE: 1
\ No newline at end of file
diff --git a/docker/Dev.Dockerfile b/docker/Dev.Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..eab5243300d39a68b4219a2b1e6eadeeba8b7e72
--- /dev/null
+++ b/docker/Dev.Dockerfile
@@ -0,0 +1,7 @@
+FROM python:3.9.16-alpine
+
+WORKDIR /app
+
+COPY requirements-dev.txt requirements-dev.txt 
+
+RUN pip install -r requirements-dev.txt
\ No newline at end of file
diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..a14c3e19e685cdbf912d6c174a9dde84d0a2b3cf
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1,7 @@
+FROM python:3.9.16-alpine
+
+WORKDIR /app
+
+COPY . .
+
+RUN pip install -r requirements.txt
\ No newline at end of file
diff --git a/docker/docker-compose-test.yaml b/docker/docker-compose-test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..2461af3b7c397f7214875be0dfdd23fc8e4589ac
--- /dev/null
+++ b/docker/docker-compose-test.yaml
@@ -0,0 +1,15 @@
+version: '3.8'
+services:
+  soar_flasgger_test:
+    build: 
+      context: ..
+      dockerfile: docker/Dev.Dockerfile
+    restart: unless-stopped
+    ports:
+      - "5000:5000"
+    container_name: soar_flasgger_test
+    environment:
+      - PYTHONDONTWRITEBYTECODE=1
+    volumes:
+      - ../:/app
+    command: "python3 -m unittest tests/test_schemas.py"
\ No newline at end of file
diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..23c80c73fc6356d8183dbc8c72d36b6f8f16aa54
--- /dev/null
+++ b/docker/docker-compose.yaml
@@ -0,0 +1,15 @@
+version: '3.8'
+services:
+  soar_flasgger:
+    build: 
+      context: ..
+      dockerfile: docker/Dockerfile
+    restart: unless-stopped
+    ports:
+      - "5000:5000"
+    container_name: soar_flasgger
+    environment:
+      - FLASK_HOST=0.0.0.0
+    volumes:
+      - ../:/app
+    command: "python generate_schema_config.py"
\ No newline at end of file
diff --git a/generate_schema_config.py b/generate_schema_config.py
index 2c1c8389073f2364f0ce62ecdf7e195a52e4702a..29b7f4d9707e20588e7b3b3dce18c58247669b12 100644
--- a/generate_schema_config.py
+++ b/generate_schema_config.py
@@ -8,6 +8,8 @@ from formats.acknowledgement import acknowledgement_schema
 from flasgger import Swagger
 from flask import Flask
 
+import os
+
 app = Flask(__name__)
 
 
@@ -74,6 +76,9 @@ swagger_config = {
 
 swag = Swagger(app, config=swagger_config, merge=True)
 
+flask_host = os.getenv(
+    "FLASK_HOST", "localhost"
+)  # Sets to whatever MQ_HOST is, or defaults to localhost
 
 if __name__ == "__main__":
-    app.run(debug=True)
+    app.run(debug=False, host=flask_host)
diff --git a/run-compose.sh b/run-compose.sh
new file mode 100755
index 0000000000000000000000000000000000000000..4df4f2af8dff8b6bcac1da229b59f4b03dac5c00
--- /dev/null
+++ b/run-compose.sh
@@ -0,0 +1,30 @@
+#! /usr/bin/env bash
+
+usage() {
+    echo "usage: ./run-compose.sh [<rebuild>]"
+    echo "    rebuild - will force docker-compose to rebuild the images before spinning them up."
+    echo "    tests - run the test suite rather than the application."
+}
+
+if [[ -z "${DATA_DIR}" ]]; then
+    DATA_DIR=$(pwd)
+fi
+
+while [ -n "$1" ]; do
+    case $1 in
+    rebuild)
+        EXTRA_ARGS="--build"
+        ;;
+    tests)
+        docker-compose -f docker/docker-compose-test.yaml up --build
+        exit 0
+        ;;
+    *)
+        usage
+        exit 0
+        ;;
+    esac
+    shift
+done
+
+docker-compose -f docker/docker-compose.yaml up $EXTRA_ARGS
\ No newline at end of file
diff --git a/tests/test_schemas.py b/tests/test_schemas.py
index bf8478d87d7c804f6a719a021f3d0908f874853b..e763f47fb41183b269c2257d421aeb25305a4b44 100644
--- a/tests/test_schemas.py
+++ b/tests/test_schemas.py
@@ -66,6 +66,8 @@ class TestSchema(unittest.TestCase):
                     )
                 )
 
+            f.close()
+
     def test_sample_gui_messages(self):
         """
         Test schema - GUI Messages
@@ -92,6 +94,8 @@ class TestSchema(unittest.TestCase):
                     )
                 )
 
+            f.close()
+
     def test_sample_ecosub_messages(self):
         """
         Test schema - Ecosub Messages
@@ -146,6 +150,8 @@ class TestSchema(unittest.TestCase):
                         format_checker=FormatChecker(),
                     )
                 )
+            
+            f.close()
 
     def test_sample_autonomy_engine_messages(self):
         """
@@ -237,6 +243,8 @@ class TestSchema(unittest.TestCase):
                     )
                 )
 
+            f.close()
+
 
 if __name__ == "__main__":
     unittest.main()